使用 Helper 模板类定义类

From Apache OpenOffice Wiki
Jump to: navigation, search


XInterface, XTypeProvider 和 XWeak

SDK 提供了一些使开发更加轻松的辅助程序(Helper),其中包括处理 com.sun.star.uno.XInterfacecom.sun.star.lang.XTypeProvider 以及 com.sun.star.uno.XWeak 实现的 Helper 模板类。这些类让您可以集中处理要实现的接口。


my_module.MyService2 的实现使用 ::cppu::WeakImplHelper3<> Helper 辅助程序。“3” 代表要实现的接口数。这个模板类接受要实现接口作为模板参数,类的声明即从这个模板类继承得到。

  #include <cppuhelper/implbase3.hxx> // "3" implementing three interfaces
  #include <cppuhelper/factory.hxx>
  #include <cppuhelper/implementationentry.hxx>
 
  #include <com/sun/star/lang/XServiceInfo.hpp>
  #include <com/sun/star/lang/XInitialization.hpp>
  #include <com/sun/star/lang/IllegalArgumentException.hpp>
  #include <my_module/XSomething.hpp>
 
 
  using namespace ::rtl; // for OUString
  using namespace ::com::sun::star; // for sdk interfaces
  using namespace ::com::sun::star::uno; // for basic types
 
 
  namespace my_sc_impl {
 
  class MyService2Impl : public ::cppu::WeakImplHelper3< ::my_module::XSomething, 
                                                lang::XServiceInfo, 
                                                lang::XInitialization > 
  {
      ...
  };
  }


下一节将关注 com.sun.star.lang.XServiceInfocom.sun.star.lang.XInitialization 的编码以及示例接口 my_module.Xsomething


cppuhelper 共享库提供附加的实现帮助程序类,例如支持 com.sun.star.lang.XComponent。请参见 SDK 的 C++ 引用中的或 udk.openoffice.org 上的 ::cppu 名称空间。


XServiceInfo

UNO 服务实现支持提供有关其实现名称和支持的服务的 com.sun.star.lang.XServiceInfo。实现名称是引用特定实现的唯一名称,在此示例中,分别是 my_module.my_sc_impl.MyService1my_module.my_sc_impl.MyService2。实现名称以后会在将实现注册到 OpenOffice.org 使用的 simple_component.rdb 注册表时使用。它可以将一个服务名称条目链接到一个实现,因为可能会存在多个实现。同一服务的多个实现可以具有不同的属性,例如运行时行为和内存空间。


我们创建的服务实例必须支持 com.sun.star.lang.XServiceInfo 接口。此接口有三个方法,可以进行如下编码以支持一个服务:

  // XServiceInfo implementation
  OUString MyService2Impl::getImplementationName()
      throw (RuntimeException)
  {
      // unique implementation name
      return OUString( RTL_CONSTASCII_USTRINGPARAM("my_module.my_sc_impl.MyService2") );
  }
  sal_Bool MyService2Impl::supportsService( OUString const & serviceName )
      throw (RuntimeException)
  {
      // this object only supports one service, so the test is simple
      return serviceName.equalsAsciiL( 
  RTL_CONSTASCII_STRINGPARAM("my_module.MyService2") );
  }
  Sequence< OUString > MyService2Impl::getSupportedServiceNames()
      throw (RuntimeException)
  {
      return getSupportedServiceNames_MyService2Impl();
  }
Content on this page is licensed under the Public Documentation License (PDL).
Personal tools
In other languages