Following is an incomplete example showing how to use the DII to invoke a request having the method procedure prototype shown here:
string _testMethod( testObject obj,
Environment *ev,
long input_value,
);
main()
{
ORBStatus rc;
Environment ev;
SOMDObject obj;
NVList arglist;
NamedValue result;
Context ctx;
Request reqObj;
OperationDef opdef;
Description desc;
OperationDescription opdesc;
static long input_value = 999;
SOM_InitEnvironment(&ev);
SOMD_Init(&ev);
/* create the argument list */
/* get the operation description from the interface repository */
opdef = _lookup_id(SOM_InterfaceRepository, *ev,
"testObject::testMethod");
desc = _describe(opdef, &ev);
opdesc = (OperationDescription *) desc.value._value;
/* fill in the TypeCode field for the result */
result.argument._type = opdesc->result;
/* Initialize the argument list */
rc = _create_operation_list(SOMD_ORBObject, &ev, opdef,
&arglist);
/* get default context */
rc = _get_default_context(SOMD_ORBObject, &ev, &ctx);
/* put value and length into the NVList */
_get_item(arglist, &ev, 0, &name, &tc, &dummy, &dummylen,
&flags);
_set_item(arglist, &ev, 0, name, tc, &input_value,
sizeof(input_value),flags);
...
/* create the request - assume the object reference came from
somewhere -- from a file or returned by a previous request*/
rc = _create_request(obj, &ev, ctx,
"testMethod", arglist, &result, &reqObj,
(Flags)0);
/* invoke request */
rc = invoke(reqObj, &ev, (Flags)0);
/* print result */
printf("result: %s\n",*(string*)(result.argument._value));
return(0);
}