Difference between revisions of "Zh/Documentation/DevGuide/ProUNO/Bridge/Value Objects"

From Apache OpenOffice Wiki
Jump to: navigation, search
(New page: {{Documentation/DevGuide/ProUNOTOC/Zh |ProUNO2c=block |ABridgeSvcMgr=block |ABridgeTM=block |ShowPrevNext=block |PrevPage=Zh/Documentation/DevGuide/ProUNO/Bridge/Client-Side Conversions |N...)
 
m
 
Line 7: Line 7:
 
|NextPage=Zh/Documentation/DevGuide/ProUNO/Bridge/Exceptions and Errorcodes
 
|NextPage=Zh/Documentation/DevGuide/ProUNO/Bridge/Exceptions and Errorcodes
 
}}
 
}}
[[zh:Zh/Documentation/DevGuide/ProUNO/Bridge/Value Objects]]
+
{{Documentation/DevGuideLanguages|Documentation/DevGuide/ProUNO/Bridge/{{SUBPAGENAME}}}}
 
{{DISPLAYTITLE:值对象}}
 
{{DISPLAYTITLE:值对象}}
  

Latest revision as of 03:09, 14 May 2009



值对象(Value Object)是可以通过桥获取的 Automation 对象。由于它可以包含值和类型说明,因此类似于 UNO any 或 VARIANT。“值对象”可以用作从 Automation 语言调用 UNO 方法的各种参数。当桥需要参数转换的附加信息时,就会使用“值对象”。当 UNO 方法接受 any 作为参数时,就会使用“值对象”。但是,在许多情况下,如果提供的参数恰好映射至默认映射中所需的 UNO 类型,则可以没有“值对象”。例如,UNO 方法接受 any 作为希望包含 short 的参数。在 Visual Basic 中提供 Long 就已经足够了。但是在 JScript 中,不存在类型,并且四字节整数将被隐式传送到调用。Any 将不会包含 short 且调用可能会失败。在这种情况下,“值对象”将确保进行准确的转换。


在只能识别函数 in 参数的语言中,“值对象”使得还可以识别 in/out 和 out 参数。由于 可以将数组对象和“值对象”用于这些参数,因此 JScript 是一个特例。


Value Object 提供可以通过 IDispatch 访问的四个函数。它们是:

 void Set( [in]VARIANT type, [in]VARIANT value);
指定类型和值。
 void Get( [out,retval] VARIANT* val);
返回对象中包含的值。Value Object 被用作 inout 或 out 参数时,还会使用 Get。
 void InitOutParam();
通知对象其被用作 out 参数。
 void InitInOutParam( [in]VARIANT type, [in]VARIANT value);
通知对象其被用作 inout 参数,并传递 in 参数的值以及类型。


如果将 Value Object 用作 in 或 inout 参数,则指定值的类型。除了“对象”名称以外,类型名称与 UNO IDL 中使用的名称一一对应。下表显示可以指定哪些类型。

名称(与 Value Object 一起使用) UNO IDL
char char
boolean boolean
byte byte
unsigned unsigned byte
short short
unsigned short unsigned short
long long
unsigned long unsigned long
string string
float float
double double
any any
object some UNO interface


要示意值为序列,请在名称前面加上括号,例如

 []char - sequence<char>
 [][]char - sequence < sequence <char > > 
 [][][]char - sequence < sequence < sequence < char > > >


Value Object 是由桥提供的,并且可以从服务管理器对象获取。服务管理器是用 ProgId“com.sun.star.ServiceManager” 注册的 COM 组件(请参阅 专业 UNO - UNO 语言绑定 - Automation 桥 - 服务器管理器组件 一章)。例如:

 // JScript
 var valueObject= objSericeManager.Bridge_GetValueObject();


要将 Value Object 用作 in 参数,请指定类型并将值传送到对象:

 // UNO IDL
 void doSomething( [in] sequence< short > ar);
 
 // JScript
 var value= objServiceManager.Bridge_GetValueObject();
 var array= new Array(1,2,3);
 value.Set("[]short",array);
 object.doSomething( value);


在上面的示例中,Value Object 被定义成由短整型值组成的一个序列。数组也可能又包含 Value Object:

 var value1= objServiceManager.Bridge_GetValueObject();
 var value2= objServiceManager.Bridge_GetValueObject();
 value1.Set("short“, 100);
 value2.Set("short", 111);
 var array= new Array();
 array[0]= value1;
 array[1]= value2;
 var allValue= objServiceManager.Bridge_GetValueObject();
 allValue.Set("[]short“, array);
 object.doSomething( allValue);


如果函数接受 out 参数,请按下面所示的那样通知 Value Object:

 // UNO IDL
 void doSomething( [out] long);


 // JScript
 var value= objServiceManager.Bridge_GetValueObject();
 value.InitOutParam();
 object.doSomething( value);
 var out= value.Get();
 

Value Objectinout 参数时,还需要知道类型和值:

 //UNO IDL
 void doSomething( [inout] long);


 //JScript
 var value= objServiceManager.Bridge_GetValueObject();
 value.InitInOutParam("long", 123);
 object.doSomething(value);
 var out= value.Get();


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