可实现的核心接口

From Apache OpenOffice Wiki
Jump to: navigation, search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.


了解要实现的接口的位置是非常重要的。这里介绍的的接口位于组件的对象实现中。编写 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