类型映射

From Apache OpenOffice Wiki
Jump to: navigation, search



当从 Automation 环境(如 VB)调用 UNO 对象时,根据调用方法的签名,会将 Automation 类型的值转换为 UNO 类型的值。如果将这些值作为 out 参数或返回值返回,则会将 UNO 类型的值转换成 Automation 类型的值。这些转换的结果由要转换的值及相应的类型映射控制。


类型映射介绍如何在 UNO 环境中表示 Automation 环境以及如何在 Automation 环境中表示 UNO 环境。Automation 类型和 UNO 类型用各自的 IDL 语言(MIDL 和 UNO IDL)进行定义。因此,类型映射将引用 IDL 类型。


IDL 类型在特定的语言中有具体的表示。为了正确使用 Automation 桥,必须知晓从 IDL 类型到语言特定类型的映射。存在 UNO 语言绑定的语言可在语言绑定文档中找到此映射。可以使用 Automation 的语言可以提供有关如何使用 Automation 类型的信息(例如,Visual Basic、Delphi)。


有些 Automation 语言可能不提供所有 Automation 类型的完整映射。例如,JScript 不提供浮点值。如果使用 C 或 C++,则可以直接使用所有 Automation 类型。


对 Automation 对象的方法调用通过 IDispatch::Invoke 来执行。调用接受类型为 DISPPARAMS 的参数,该类型包含 VARIANTARG 数组中方法的实际参数。这些 VARIANTARG 被认为是存放实际类型的地方。在大多数 Automation 语言中,您甚至不曾了解 IDispatch。例如:

 //UNO IDL
 string func([in] long value);
 //VB 
 Dim value As Long
 value= 100
 Dim ret As String
 ret= obj.func( value)


在本示例中,参数是长整形,返回值是字符串。也就是说,IDispatch::Invoke 将接收 VARIANTARG,其中包含长整形并返回包含字符串的 VARIANT


如果通过 com.sun.star.script.XInvocation:invoke 从 UNO 调用 Automation 对象,则所有参数都以 any 形式提供。与 VARIANTARG 类似,any 用于存放实际的类型。要从 UNO 调用 Automation 对象,可能需要使用 StarBasic。然后隐藏 XInvocation 接口,就像在 Visual Basic 中隐藏 IDispatch 一样。


桥按照 专业 UNO - UNO 语言绑定 - Automation 桥 - 类型映射 - 默认映射 中指定的类型映射转换值。此外,如果值的类型不符合默认映射(专业 UNO - UNO 语言绑定 - Automation 桥 - 类型映射 - 转换映射),其将试图强制转换。


在某些情况下,Automation 客户机可能需要告诉桥参数的内容。为此,您可以使用值对象(专业 UNO - UNO 语言绑定 - Automation 桥 - 类型映射 - 值对象)。


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