XInterface

From Apache OpenOffice Wiki
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() 的规则是相同的。


Tip.png 如果您要在 Java 中实现 queryInterface(),例如,您要导出少于实现数量的接口,您的类必须实现 Java 接口 com.sun.star.uno.IqueryInterface



引用计数

方法 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