编写客户机程序

From Apache OpenOffice Wiki
< Zh‎ | Documentation
Revision as of 05:27, 18 July 2008 by Jirong (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


要构建客户机程序,至少必须引用 cli_types.dllcli_cppuhelper.dll。当使用其中的一个类时,还可以引用 cli_ure。这些程序库安装在 GAC 和办公软件的安装程序文件夹中。通过具体的编译程序切换可进行引用,例如 C++ 的 /AI(带有管理扩展名)或 C# 编译程序的 /reference。C++ 还要求使用 #using 指定 dll:

 #using <mscorlib.dll>
 
 #using <cli_types.dll>


以下示例讨论如何使用由正在运行的办公软件进程提供的服务:


每个远程客户机程序的起点都是组件上下文。它是由静态函数 defaultBootstrap_InitialComponentContext 创建,该函数由类 uno.util.Bootstrap 提供。上下文提供可以创建 UNO 组件的服务管理器。但是,这些组件对于客户机进程仍然是原组件,也就是说,它们不是来自正在运行的办公软件,因此,不会影响正在运行的办公软件。实际上,需要的是正在运行的办公软件的服务管理器。为此,需使用组件 com.sun.star.bridge.UnoUrlResolver,该组件由本地服务管理器提供。UnoUrlResolver 连接到远程办公软件,并在客户机进程中创建办公软件服务管理器的代理。示例代码如下:

  //C# example
  System.Collections.Hashtable ht = new System.Collections.Hashtable();
  ht.Add("SYSBINDIR", "file:///<office-dir>/program");
  unoidl.com.sun.star.uno.XComponentContext xLocalContext =
           uno.util.Bootstrap.defaultBootstrap_InitialComponentContext(
           "file:///<office-dir>/program/uno.ini", ht.GetEnumerator());
 
  unoidl.com.sun.star.bridge.XUnoUrlResolver xURLResolver = 
                    (unoidl.com.sun.star.bridge.XUnoUrlResolver) 
                            xLocalContext.getServiceManager().
                                     createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver",
                   xLocalContext);
 
  unoidl.com.sun.star.uno.XComponentContext xRemoteContext =
           (unoidl.com.sun.star.uno.XComponentContext) xURLResolver.resolve(
                    "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext");
 
  unoidl.com.sun.star.lang.XMultiServiceFactory xRemoteFactory =
           (unoidl.com.sun.star.lang.XMultiServiceFactory)
                    xRemoteContext.getServiceManager();

使用现有正在运行的办公软件的工厂,可以远程访问办公软件的所有组件。


对于要连接正在运行的办公软件的客户机来说,必须使用正确的参数启动办公软件。在这种情况下,命令行如下:

 soffice -accept=socket,host=localhost,port=2002;urp; 


有关进程间通信的详细信息,请参阅开发者指南中的 专业 UNO - UNO 概念 - UNO 进程间连接 一章。


示例说明了远程控制办公软件的方案。但是,可以编写不依赖于正在运行的办公软件的 UNO 应用程 序。然后,通常会提供注册服务自己的数据库。有关详细信息,请参阅 编写 UNO 组件 - 组件的部署选项 - 手动安装组件


有一个过载函数 uno.util.Bootstrap.defaultBootstrap_InitialComponentContext,该函数不接受参数。它始终会连接最新安装的办公软件。甚至能够启动办公软件。为实现此功能,函数需要知道办公软件的安装位置。此信息可以从 windows 注册表中获取。安装过程中,写入 HKEY_CURRENT_USER\Software\OpenOffice.org\UNO\InstallPath 还是 HKEY_LOCAL_MACHINE\Software\OpenOffice.org\UNO\InstallPath 项取决于用户选择的是某用户安装还是所有用户的安装。函数首先使用 HKEY_CURRENT_USER 中的项,如果该项不存在,则使用 HKEY_LOCAL_MACHINE 中的项。如果没有启动办公软件,请检查这些项。此外,还要确保 PATH 环境变量中没有包含不同的 office.Implementing UNO 接口的程序路径。


CLI-UNO 语言绑定不支持用 CLI 语言编写的 UNO 组件。相反,它充当 CLI 客户机程序和办公软件之间的联系纽带。客户机程序通常从办公软件获取 UNO 对象并对这些对象执行操作。因此,很少需要实现 UNO 接口。


为了从 UNO 对象接收通知,有必要实现正确的接口。此外,为了将对象用作 UNO 方法的参数,还可以实现接口。


通过声明由一个或多个接口派生且为接口方法提供实现的类,可以实现接口。CLI 各种语言的相应文档中都介绍了实现方法。

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