Difference between revisions of "Documentation/DevGuide/ProUNO/Bridge/Return Values"
m |
OOoWikiBot (Talk | contribs) m (FINAL VERSION FOR L10N) |
||
Line 7: | Line 7: | ||
|NextPage=Documentation/DevGuide/ProUNO/Bridge/Usage of Types | |NextPage=Documentation/DevGuide/ProUNO/Bridge/Usage of Types | ||
}} | }} | ||
− | + | {{Documentation/DevGuideLanguages|Documentation/DevGuide/ProUNO/Bridge/{{SUBPAGENAME}}}} | |
{{DISPLAYTITLE:Return Values}} | {{DISPLAYTITLE:Return Values}} | ||
There are three possible ways to return values in UNO: | There are three possible ways to return values in UNO: |
Revision as of 08:19, 13 May 2009
There are three possible ways to return values in UNO:
- function return values
-
inout
parameters -
out
parameters
Return values are commonplace in most languages, whereas inout
and out
parameters are not necessarily supported. For example, in JScript.
To receive a return value in C++ provide a VARIANT
argument to IDispatch::Invoke:
//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);
The following example shows using VB and JScript this is simple:
//VB Dim result As Long result= obj.func //JScript var result= obj.func
When a function has inout parameters then provide arguments by reference in 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.
The above VB code is written like this, because VB uses call by reference by default. After the call to func()
, value contains the function output:
Dim value As Long value= 10 obj.func value
The type of argument corresponds to the UNO type according to the default mapping, cf . Type Mappings. If in doubt, use VARIANT
s.
Dim value As Variant value= 10; obj.func value
However, there is one exception. If a function takes a character (char
) as an argument and is called from VB, use an Integer
, because there is no character type in VB. For convenience, the COM bridge also accepts a String as inout
and out
parameter:
//VB Dim value As String // string must contain only one character value= "A" Dim ret As String obj.func value
JScript does not have inout
or out
parameters. As a workaround, the bridge accepts JScript Array
objects. Index 0 contains the value.
// Jscript var inout= new Array(); inout[0]=123; obj.func( inout); var value= inout[0];
Out parameters are similar to inout
parameters in that the argument does not need to be initialized.
//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). |