Difference between revisions of "Zh/Documentation/DevGuide/AdvUNO/Advanced UNO"
(New page: {{Documentation/DevGuide/AdvUNOTOC/Zh |ShowPrevNext=block |PrevPage=Zh/Documentation/DevGuide/Extensions/Absolute Position of Nodes |NextPage=Zh/Documentation/DevGuide/AdvUNO/Language Bind...) |
m (→选择实现语言) |
||
Line 12: | Line 12: | ||
UNO 技术为跨平台和不受语言限制的编程提供了一个框架。所有 {{PRODUCTNAME}} 组件都能以任意一种 UNO 支持的语言实现,前提是这些组件仅通过 IDL 接口与其他组件进行通信。 | UNO 技术为跨平台和不受语言限制的编程提供了一个框架。所有 {{PRODUCTNAME}} 组件都能以任意一种 UNO 支持的语言实现,前提是这些组件仅通过 IDL 接口与其他组件进行通信。 | ||
− | {{Documentation/Note| | + | {{Documentation/Note|注:必须严格遵守“这些组件仅通过 IDL 接口和其他组件进行通信”的条件。实际上,{{PRODUCTNAME}} 中的许多实现都导出 UNO 接口,并且仍使用专用的 C++ 接口。主要原因是一些早期实现无法在允许期限内重写。}} |
这种灵活性使开发者可以根据需要编辑 Office;但对于特定的问题,开发者还是需要考虑应选择哪种 | 这种灵活性使开发者可以根据需要编辑 Office;但对于特定的问题,开发者还是需要考虑应选择哪种 |
Revision as of 03:04, 12 June 2008
选择实现语言
UNO 技术为跨平台和不受语言限制的编程提供了一个框架。所有 OpenOffice.org 组件都能以任意一种 UNO 支持的语言实现,前提是这些组件仅通过 IDL 接口与其他组件进行通信。
这种灵活性使开发者可以根据需要编辑 Office;但对于特定的问题,开发者还是需要考虑应选择哪种 实现语言。
支持的编程环境
UNO 和 OpenOffice.org 中支持的编程语言分为三类式
- 可能用其他编程语言实现的可调用现有 UNO 对象的语言。另外,这类语言还可以用来实现特定的 UNO 接口,但不包括服务管理器实例化的 UNO 组件。
- 实现 UNO 组件的语言。任何一种 UNO 支持的语言可通过服务管理器的名称实例化一个服务的方式来调用这类语言实现的 UNO 对象。例如,开发者可以实现 StarSuite Calc 插件(请参阅章节 电子表格文档)。
- 用于编写要在 OpenOffice.org 文档中传送的代码并使用由 OpenOffice.org 对话框编辑器设计的对话框的语言。
下表列出了 UNO 当前支持的编程语言。表格列中的“是”表示完全支持;“否”表示不支持且将来也不会支持。“将来可能”表示当前不支持,但将来的版本可能支持式
语言 | UNO 脚本 | UNO 组件 | 在 OpenOffice.org 文档中使用 |
---|---|---|---|
C++ | 是 | 是 | 否 |
C | 将来可能 | 将来可能 | 否 |
Java | 是 | 是 | 将来可能 |
StarBasic | 是 | 否 | 是 |
OLE automation (仅限 win32) | 是 | 将来可能 | 将来可能 |
Python | 将来可能 (开发中) | 将来可能 (开发中) | 将来可能 |
Java
Java 是一种常用的编程语言,它提供了一个标准程序库,其中含有大量的功能和可用扩展。并且以后还将提供其他扩展,例如用于调用 webservice 的 JAX-RPC。它是一种类型安全的语言,具有类型安全的 UNO 绑定。虽然需要明确查询接口,但类型安全的属性仍使其非常适用于大型项目。UNO 组件可以使用 Java 来实现。也就是说,当实例化 Java 组件时,会在 Office 进程内部要求启动 Java VM。OfficeBean 允许在 Java Applet 和应用程序中嵌入 OpenOffice.org 文档。
每次调用以其他语言绑定实现的 UNO 对象时,都会有 1 到 2 毫秒的固定开销,这是桥转换例行程序导致的。由于 OpenOffice.org 由 C++ 代码组成,所以 Office 中的每个 Java 调用都需要进行桥接。如果每次用户交互仅有少数几个调用,这通常不会引发什么问题。但当例行程序生成数百个甚至数千个调用时,运行时的开销将会破坏应用程序。
C++
C++ 是一种用于提供第三方产品的常用编程语言。除了本身具有速度快的特点之外(因为是在本地 进行编译),它还可以最大限度地提高与 OpenOffice.org 的通信速度,这是因为 Office 中的多数基本部件都是使用 C++ 开发的。不过当通过进程间桥对 Office 中的对象进行调用时,每个远程调用都会产生 1 到 2 毫秒的固定开销,因此这种优势就不很明显了。运行最快速的 Office 扩展可以由 C++ UNO 组件实现。由于编译时具有可靠的类型安全性,因此它也非常适用于大型项目。
C++ 很难掌握,而且其编码通常较长,例如,比 Java 编码长。另外对每个平台,都需要创建组件, 这会使开发和部署过程变得较为复杂式
OpenOffice.org Basic
OpenOffice.org Basic是一种脚本语言,可以直接开发并集成到 OpenOffice.org 中。您可以将代码插入文档中,可以将任意 Office 事件(如文档加载、键盘快捷键或菜单项)附加到 Basic 代码,还可以使用 OpenOffice.org IDE 中设计的对话框。因此就目前来说,它与 OpenOffice.org 的集成性是最好的。在 Basic 中,是激发对对象的调用,而不是对特定接口的调用。诸如 com.sun.star.beans.XPropertySet 之类的接口被集成为 Basic 的对象属性。Basic 始终在 Office 进程中运行,从而避免了消耗巨大的进程间调用。
该语言不具有类型安全性,也就是说,在编译过程中只能发现最小数量的错误,而大多数错误出现在运行时。因此,它不是大型项目的最佳选择。另外,该语言是 OpenOffice.org 专用的,仅提供少量的运行时功能,而且这些功能不受第三方支持。Office 的所有功能都是通过 UNO 来使用的。Basic 不能实现 UNO 组件,唯一可以实现的 UNO 对象是侦听器。最后,Basic 不提供任何线程支持。
OLE Automation 桥
OLE Automation 桥为支持 OLE 自动化的编程环境 (如 Visual Basic、JScript、Delphi 或 C++ Builder)与广阔的 UNO 世界之间架起了一座桥梁。使用 Windows 平台的程序员只需要学习新的 API,就可以继续使用他们所使用的语言编写 OpenOffice.org 程序。这些程序员可以访问由他们所使用的语言提供的程序库。如果编程语言支持对象实现,则可能可以实现 UNO 对象。
但这种桥的缺点在于它只能用于 Win32 计算机。脚本通常会在不同的进程中运行,因此每个 UNO 调用都有至少 1 到 2 毫秒的固定进程间开销。目前还不能为服务管理器实现自动化 UNO 组件,但是将来可能可以实现。
Python
Python 脚本桥 (PyUNO) 目前正在由 Ralph Thomas 开发,仅在具有已知限制条件的实验 alpha 状态中可用。如果需要更多信息,请参阅 udk.openoffice.org 上的 PyUNO。.
使用实例
以下列出了对于各种语言环境,UNO 的典型应用。
Java
- 自动创建 Office 文档的 Servlet;Java Server Pages
- 基于服务器的协作平台;文档管理系统
- Calc 加载宏
- Chart 加载宏
- 数据库驱动程序
C++
- 通过 UNO 调用读取文档数据并生成 Office 文档的过滤器
- 数据库驱动程序
- Calc 加载宏
- Chart 加载宏
OpenOffice.org Basic
- Office 自动化
- 事件驱动的数据识别窗体
OLE Automation
- Office 自动化,从其他应用程序和动态服务器页面 (ASP) 创建和控制 Office 文档
Python
- Calc 加载宏
建议
每种语言都有各自的优点和不足(如上所述),没有哪种语言可以满足所有要求,应当根据需要选择所使用的语言。在开始新的项目之前,请认真评估一下要使用的语言,这样可以节省您的时间。
有时可能需要使用多种语言以取长补短。例如,目前无法将键盘事件附加到 java 方法,而只要编写一个 Basic 函数就可以将此事件传送到 java 组件式
UNO 支持的语言可能会逐渐增多,而且上面表格中显示的某些限制也会逐步取消。
Content on this page is licensed under the Public Documentation License (PDL). |