XInterface
From Apache OpenOffice Wiki
< Zh | Documentation
所有服务实现必须实现 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
相同,则这两个对象相同。必须在这两个对象上调用XInterface
的queryInterface()
。在 Java 中,通过调用运行时函数com.sun.star.uni.UnoRuntime.areSame()
检查一致性。
指定此规范的原因是 UNO 运行时环境可以选择缓存 queryInterface()
调用。此规则与MS COM 中的函数 QueryInterface()
的规则是相同的。
引用计数
方法 acquire()
和 release()
处理 UNO 对象的生命周期。专业 UNO - UNO 概念 - UNO 对象的生存期 详细介绍了这方面内容。获取和释放必须以线程安全的方式实现。我们将在下面有关 C++ 组件的小节中利用 C++ 进行演示。
Content on this page is licensed under the Public Documentation License (PDL). |