XInterface

From Apache OpenOffice Wiki
< Zh‎ | Documentation
Revision as of 03:27, 24 July 2008 by Jirong (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


所有服务实现必须实现 com.sun.star.uno.XInterface。如果 Java 组件从 SDK 提供的 Java 帮助程序类导出,它将自动支持 XInterface 。否则,需要将 XInterface 或任意其他 UNO 接口添加到 implement 列表中。Java UNO 运行时负责管理 XInterface 。在 C++ 中,存在可以继承的已实现 XInterface 的帮助程序类。但是,如果要手动实现 XInterface ,请使用下面的代码。


com.sun.star.uno.XInterface 的 IDL 规范如下所示:

  // module com::sun::star::uno
  interface XInterface
  {
      any queryInterface( [in] type aType ); 
      [oneway] void acquire(); 
      [oneway] void release(); 
  };


queryInterface() 的要求

调用 queryInterface() 时,调用程序将询问实现是否支持类型参数指定的接口。UNOIDL 基本类型存储类型的名称及其 com.sun.star.uno.TypeClass。如果可用,调用必须返回请求类型的接口引用;否则,返回无意义的 any。queryInterface() 实现必须满足以下条件:


始终如一的行为

如果特定对象的 queryInterface() 返回给定类型的有效接口引用,则此对象对相同类型的后续 queryInterface() 调用必须始终返回有效的引用。XInterface 的查询必须始终返回相同的引用。
如果特定对象的 queryInterface() 返回给定类型的无意义的 any,则对于相同的类型,必须始终返回的 any


对称

如果对引用 xFoo 上的 XBar 进行的 queryInterface() 返回一个引用 xBar,那么对类型 XFoo 的引用 xBar 进行的 queryInterface() 必须返回 xFoo,或者对返回的引用进行的调用必须相当于调用 xFoo


对象标识

在 C++ 中,如果两个对象的 XInterface 相同,则这两个对象相同。必须在这两个对象上调用 XInterfacequeryInterface()。在 Java 中,通过调用运行时函数 com.sun.star.uni.UnoRuntime.areSame() 检查一致性。


指定此规范的原因是 UNO 运行时环境可以选择缓存 queryInterface() 调用。此规则与MS COM 中的函数 QueryInterface() 的规则是相同的。


Template:Documentation/Tip


引用计数

方法 acquire()release() 处理 UNO 对象的生命周期。专业 UNO - UNO 概念 - UNO 对象的生存期 详细介绍了这方面内容。获取和释放必须以线程安全的方式实现。我们将在下面有关 C++ 组件的小节中利用 C++ 进行演示。


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools
In other languages