Difference between revisions of "Zh/Documentation/DevGuide/ProUNO/CLI/Writing Client Programs"
| m | |||
| Line 7: | Line 7: | ||
| |NextPage=Zh/Documentation/DevGuide/ProUNO/CLI/The Override Problem | |NextPage=Zh/Documentation/DevGuide/ProUNO/CLI/The Override Problem | ||
| }} | }} | ||
| − | + | {{Documentation/DevGuideLanguages|Documentation/DevGuide/ProUNO/CLI/{{SUBPAGENAME}}}} | |
| {{DISPLAYTITLE:编写客户机程序}} | {{DISPLAYTITLE:编写客户机程序}} | ||
Latest revision as of 03:15, 14 May 2009
要构建客户机程序,至少必须引用 cli_types.dll 和 cli_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). | 

