编译和测试 C++ 组件
From Apache OpenOffice Wiki
< Zh | Documentation
编译过程
如果需要更多有关编译组件代码的信息,请参阅 GUN makefile 文件。它使用了许多 SDK 中的平台相关的变量,这些变量包括在 <SDK>/settings/settings.mk 中。为简单起见,此处省略具体内容,只概要介绍建立过程的八个步骤:
- UNOIDL 编译程序将 .idl 文件 some.idl 编译到 urd 文件中。
- 生成的二进制 .urd 文件合并到新的 simple_component.rdb。
- 工具 xml2cmp 解析 XML 组件说明 simple_component.xml,以了解编译所需的类型。此文件介绍了用于部署的服务实现,例如实现的目的和使用的类型。如果需要有关这些 XML 文件的语法的更多信息,请访问 http://udk.openoffice.org/common/man/module_description.html。
- 步骤 3 中解析的类型将传送到 cppumaker,它将使用 simple_component.rdb 和存储在您的 OpenOffice.org 的程序目录中的 OpenOffice.org 类型库 types.rdb 在包括目录的输出中生成相应的标头对。
- 编译源文件 service1_impl.cxx 和 service2_impl.cxx。
- 共享库被链接出对象文件,而是动态连接到 UNO 基本库 sal、cppu 和 cppuhelper。共享库的名称在 Unix 上是 libsimple_component.so,在 Windows 上是 simple_component.dll。
- 共享库组件注册到 simple_component.rdb 中。此操作也可以通过手动运行以下命令来完成。
$ regcomp -register -r simple_component.rdb -c simple_component.dll
测试注册并使用
组件的注册表 simple_component.rdb 拥有已注册的服务实现的条目。如果已成功注册库,请运行:
$ regview simple_component.rdb
其结果应类似如下所示:
/ / UCR / my_module / XSomething ... interface information ... / IMPLEMENTATIONS / my_module.my_sc_impl.MyService2 / UNO / ACTIVATOR Value: Type = RG_VALUETYPE_STRING Size = 34 Data = "com.sun.star.loader.SharedLibrary" / SERVICES / my_module.MyService2 / LOCATION Value: Type = RG_VALUETYPE_STRING Size = 21 Data = "simple_component.dll" / my_module.my_sc_impl.MyService1 / UNO / ACTIVATOR Value: Type = RG_VALUETYPE_STRING Size = 34 Data = "com.sun.star.loader.SharedLibrary" / SERVICES / my_module.MyService1 / LOCATION Value: Type = RG_VALUETYPE_STRING Size = 21 Data = "simple_component.dll" / SERVICES / my_module.MyService1 Value: Type = RG_VALUETYPE_STRINGLIST Size = 40 Len = 1 Data = 0 = "my_module.my_sc_impl.MyService1" / my_module.MyService2 Value: Type = RG_VALUETYPE_STRINGLIST Size = 40 Len = 1 Data = 0 = "my_module.my_sc_impl.MyService2"
OpenOffice.org 可以识别插入 OpenOffice.org 的程序目录的 unorc 文件(在 Unix 上;在 Windows 上是 uno.ini)中的注册表文件。通过 simple_component.rdb 扩展该文件中的类型和服务。给定文件必须是绝对文件 URL,但是如果 rdb 被复制到 OpenOffice.org 程序目录,则可以使用 $ORIGIN 宏,如以下 unorc 文件所示:
[Bootstrap] UNO_TYPES=$ORIGIN/types.rdb $ORIGIN/simple_component.rdb UNO_SERVICES=$ORIGIN/services.rdb $ORIGIN/simple_component.rdb
第二,运行 OpenOffice.org 时,请扩展 PATH (Windows) 或 LD_LIBRARY_PATH (Unix),包括建立的输出路径,以便加载程序可以找到组件。如果共享库被复制到程序目录或程序目录内创建的链接(仅适用于 Unix),则不要扩展路径。
启动 OpenOffice.org Basic 脚本中的测试组件的操作很简单,如以下代码所示:
Sub Main REM calling service1 impl mgr = getProcessServiceManager() o = mgr.createInstance("my_module.MyService1") MsgBox o.methodOne("foo") MsgBox o.dbg_supportedInterfaces REM calling service2 impl dim args( 0 ) args( 0 ) = "foo" o = mgr.createInstanceWithArguments("my_module.MyService2", args()) MsgBox o.methodOne("bar") MsgBox o.dbg_supportedInterfaces End Sub
此程序可以实例化服务实现,并执行对其接口的调用。methodOne()
调用返回的值将在消息框中显示。Basic 对象属性 dbg_supportedInterfaces
将通过对象的 com.sun.star.lang.XTypeProvider 接口检索信息。
Content on this page is licensed under the Public Documentation License (PDL). |