可实现的核心接口

From Apache OpenOffice Wiki
Jump to: navigation, search


了解要实现的接口的位置是非常重要的。这里介绍的的接口位于组件的对象实现中。编写 UNO 组件时,所需的方法必须实现到应用程序中,还要使用核心接口与 UNO 环境通信。这些核心接口有的是强制性的,另外一些则是可选择的。

接口 必需 应该实现 可选 特殊情况 C++ 和 Java 可用的 Helper 类
XInterface
XTypeProvider
XServiceInfo
XWeak
XComponent
XInitialization
XMain
XAggregation
XUnoTunnel


上表中的接口的特点已做过简要介绍。下面将详细介绍各个接口,并且还将说明帮助程序是否可用以及适用的情况。


com.sun.star.uno.XInterface

没有这个接口,组件就不能工作。基接口 XInterface 提供对服务的更高层接口的访问,并允许其他对象通知服务何时不再需要它,以便它自行注销。
  // com::sun::star::uno::XInterface
 
  any queryInterface( [in] type aType );
  [oneway] void acquire(); // increase reference counter in your service implementation
  [oneway] void release(); // decrease reference counter, delete object when counter becomes zero
开发者通常不会显式调用 acquire(),因为在通过 UnoRuntime.queryInterface()Reference<destInterface>(sourceInterface,UNO_QUERY) 获取对组件的引用时,语言绑定会自动调用它。而与之相对应的 release() 则是在引用超出范围(在 C++ 中)或垃圾收集器抛出包含引用的对象(在 Java 中)时被自动调用。


com.sun.star.lang.XTypeProvider

脚本语言(如 OpenOffice.org Basic)可以使用此接口来获取类型信息。没有它,OpenOffice.org Basic 将无法使用组件。
  // com::sun::star::lang::XTypeProvider
 
  sequence<type> getTypes(); 
  sequence<byte> getImplementationId();
XTypeProviderXServiceInfo(下文)将来可能会过时,而另外还可能会出现语言绑定特别机制以用于查询对象的属性。


com.sun.star.lang.XServiceInfo

此接口由其他对象使用,以获取有关服务实现的信息。.
  // com::sun::star::lang::XServiceInfo
 
  string getImplementationName(); 
  boolean supportsService( [in] string ServiceName ); 
  sequence<string> getSupportedServiceNames();


com.sun.star.uno.XWeak

此接口允许客户端保持对对象的弱引用。如果其他客户端保持对对象的强引用,则弱引用不能保证该对象免受销毁,因此允许再次获取强引用。使用这项技术是为了避免循环引用。即使您不需要使用此接口,它也可以用于要对您的对象实例创建弱引用的客户端。
  // com.sun.star.uno.XWeak
 
  com::sun::star::uno::XAdapter queryAdapter(); // creates Adapter


com.sun.star.lang.XComponent

此接口在组件中发生循环引用时使用,这时组件包含另一个对象,而这个对象又包含对该组件的引用。可以在服务说明中指定由谁来销毁这个对象。
  // com::sun::star::lang::XComponent
 
  void dispose(); //an object owning your component may order it to delete itself using dispose()
  void addEventListener(com::sun::star::lang::XEventListener xListener); // add dispose listeners
  void removeEventListener (com::sun::star::lang::XEventListener aListener); // remove them


com.sun.star.lang.XInitialization

此接口用于使其他对象可以与组件一起使用 createInstanceWithArguments()createInstanceWithArgumentsAndContext()。应该实现此接口,并在 initialize() 中处理参数:
  // com::sun::star::lang::XInitialization
 
  void initialize(sequence< any > aArguments) raises (com::sun::star::uno::Exception);


com.sun.star.lang.XMain

此接口用于与 UNO 可执行文件一起使用,以从 OpenOffice.org 服务管理器独立地实例化组件。
  // com.sun.star.lang.XMain
 
  long run (sequence< string > aArguments);


com.sun.star.uno.XAggregation

此接口用于实现在聚合中协作。如果实现此接口,其他对象可以聚合到实现中。已聚合的对象表现出的行为就像它们是一个对象。如果另一个对象聚合组件,它将包含组件并委托对该组件的调用,从而使组件看起来与聚合的对象是一体的。
  // com.sun.star.uno.XAggregation
 
  void setDelegator(com.sun.star.uno.XInterface pDelegator);
  any queryAggregation(type aType);


com.sun.star.lang.XUnoTunnel

此接口在向组件提供一个指针,指向同一个进程中的另一个组件。这可以通过使用 XunoTunnel 完成。XUnoTunnel 不应由新组件使用,因为如果其他全部失败,它将用于现有实现的集成。


至此,您应该能够确定要使用哪些接口了。有时,接口的取舍也要花费必要的精力。以下各节分别 讨论上述各个接口,介绍如何利用 Java 或 C++ 中预实现的帮助程序类,以及在各种语言中,可能的 实现必须包括哪些内容。

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