将定义分组为模块

From Apache OpenOffice Wiki
Jump to: navigation, search


为避免名称冲突,并提供更好的 API 结构,UNOIDL 支持命名范围。相应的指令是 module:

  module mymodule {
  };

模块 mymodule 中的指令仅为在此 module {} 花括号对中定义的类型已知。在每个模块中,类型标识符是唯一的。因此,UNOIDL 模块与 Java 软件包或 C++ 名称空间类似。


模块可以嵌套。以下代码显示了模块 star 中包含的模块 bridge 包含的 XUnoUrlResolver 接口,模块 star 又包含在模块 com 中的 sun 模块中。

  module com { module sun { module star { module bridge {
      // interface XUnoUrlResolver in module com::sun::star::bridge
  }; }; }; };


按照惯例,模块名称使用小写字母。对于 IDL 类型,请使用您自己的模块分层。要将代码分发到 OpenOffice.org,请使用 org::openoffice 名称空间或 com::sun::star。如果要加入到后一个模块,请先与 www.openoffice.org 中 API 项目的引导人讨论名称的选择。com::sun::star 名称空间反映了 OpenOffice.org 在 StarSuite 中的历史渊源,而且为了实现兼容会将其保留下来。


在 UNOIDL 模块中定义的类型必须使用完整类型或符合范围的名称进行引用,即必须输入包含您的 类型的所有模块,并用范围运算符 :: 来分隔模块。例如,要在另一个 idl 定义文件中引用 XUnoUrlResolver,应该写 com::sun::star::bridge::XUnoUrlResolver


此外,模块在生成特定于语言的文件时具有一定的优势。 如果需要,工具 cppumakerjavamaker 将自动为每个引用的 module 创建子目录。头文件和类定义保存在各自的文件夹中,因而无需更进一步的操作。


可能混淆的一个原因是 UNOIDL 和 C++ 使用 “::” 分隔名称中的单个标识符,而 UNO 本身(例如在类似 com.sun.star.lang.XMultiComponentFactory:createInstanceWithContext 的方法中)和 Java 使用 “.”。


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