Difference between revisions of "Zh/Documentation/DevGuide/ProUNO/Bridge/Return Values"
From Apache OpenOffice Wiki
		< Zh | Documentation
		
		
| m (New page: {{Documentation/DevGuide/ProUNOTOC/Zh |ProUNO2c=block |ABridgeSvcMgr=block |UNOAuto=block |ShowPrevNext=block |PrevPage=Zh/Documentation/DevGuide/ProUNO/Bridge/Calling Functions and Access...) | m | ||
| Line 7: | Line 7: | ||
| |NextPage=Zh/Documentation/DevGuide/ProUNO/Bridge/Usage of Types | |NextPage=Zh/Documentation/DevGuide/ProUNO/Bridge/Usage of Types | ||
| }} | }} | ||
| − | + | {{Documentation/DevGuideLanguages|Documentation/DevGuide/ProUNO/Bridge/{{SUBPAGENAME}}}} | |
| {{DISPLAYTITLE:返回值}} | {{DISPLAYTITLE:返回值}} | ||
Latest revision as of 03:00, 14 May 2009
在 UNO 中,可以通过三种方法返回值: 
- 函数返回值
- inout参数
- out参数
在大多数语言中,一般都可以返回值,但不一定支持 inout 和 out 参数,例如 JScript。 
在 C++ 中要接收返回值,请向 IDispatch::Invoke 提供一个 VARIANT 参数:
 //UNO IDL
 long func();
 
 //
   DISPPARAMS dispparams= { NULL, 0, 0, 0}; 
   VARIANT result; 
   VariantInit( &result); 
   hr= pdisp->Invoke( dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, 
                            &dispparams, &result, NULL, 0); 
以下示例显示使用 VB 和 JScript 时,获得返回值比较简单:
//VB Dim result As Long result= obj.func //JScript var result= obj.func
当函数具有 inout 参数时,请在 C++ 中以引用的方式提供参数:
 //UNO IDL
 void func( [inout] long val);
 
 //C++
 long longOut= 10;
 VARIANT var;
 VariantInit(&var);
 var.vt= VT_BYREF | VT_I4;
 var.plVal= &longOut;
 
 DISPPARAMS dispparams= { &var, 0, 1, 0}; 
 hr= pdisp->Invoke( dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD,
                 &dispparams, NULL, NULL, 0);
 
 //The value of longOut will be modified by UNO function.
上面显示了 VB 代码的编写方式,因为默认情况下,VB 通过引用进行调用。调用 func() 后,value 中包含函数的输出结果:
Dim value As Long value= 10 obj.func value
参数类型按照默认映射与 UNO 类型相对应,请参阅 专业 UNO - UNO 语言绑定 - Automation 桥 - 类型映射。如果不能确定类型,请使用 VARIANT。
Dim value As Variant value= 10; obj.func value
但是,存在一种例外情况。如果函数将一个字符 (char) 作为参数,并且是从 VB 调用,则使用 Integer,因为 VB 中没有字符类型。为了方便起见,COM 桥还接受将字符串作为 inout 和 out 参数:
//VB Dim value As String // string must contain only one character value= "A" Dim ret As String obj.func value
JScript 不支持 inout 和 out 参数。作为一种解决办法,桥接受 JScript Array 对象。索引 0 包含值。
// Jscript var inout= new Array(); inout[0]=123; obj.func( inout); var value= inout[0];
Out 参数与 inout 参数类似,都无需初始化变量。 
 //C++
 long longOut;
 VARIANT var;
 VariantInit(&var);
 var.vt= VT_BYREF | VT_I4;
 var.plVal= &longOut;
 
 DISPPARAMS dispparams= { &var, 0, 1, 0}; 
 hr= pdisp->Invoke( dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD,
                 &dispparams, NULL, NULL, 0);
 
 //VB
 Dim value As Long
 obj.func value
 
 //JScript
 var out= new Array();
 obj.func(out);
 var value= out[0];
| Content on this page is licensed under the Public Documentation License (PDL). | 

