[omniORB] Inout parameter - DII
Shanmugam Deveraj
shm@transynergy.net
Mon, 25 Jun 2001 20:30:54 +0200
Hi!
Who holds the memory allocated/re-allocated in execute()?
Is it my_inout or sReturn? sReturn asserts while freeing the memory.
What happens to the memory for the below redirection?
my_inout >>= (char *&)sReturn;
Regards,
Shanmugam.D.
-----Original Message-----
From: owner-omniorb-list@uk.research.att.com
[mailto:owner-omniorb-list@uk.research.att.com]On Behalf Of Shanmugam
Deveraj
Sent: Monday, June 25, 2001 8:07 PM
To: 'Gary D. Duzan'; 'omniorb-list@uk.research.att.com'
Subject: RE: [omniORB] Inout parameter - DII
Hi Gary Duzan
Thanks a lot. It works with.
my_inout >>= (const char *&)sReturn;
Regards,
Shanmugam.D.
-----Original Message-----
From: Gary D. Duzan [mailto:gdd0@gte.com]
Sent: Monday, June 25, 2001 7:48 PM
To: Shanmugam Deveraj
Subject: Re: [omniORB] Inout parameter - DII
I haven't tried it myself, but this should work:
CORBA::Any& my_inout = req->add_inout_arg();
my_inout <<= sReturn;
// ...
req->invoke();
// ...
my_inout >>= sReturn;
I imagine it is replacing the Any contents, not the _var contents,
so you have to do it yourself.
Gary Duzan
Verizon IT
In Message <33DB02A3ED28D511AEEA00B0D0AA173401870C@SYNERGY> ,
Shanmugam Deveraj <shm@transynergy.net> wrote:
=>Hi
=>
=>Can anyone throw some highlight on why inout parameter doesn't work in
=>the DII scenario? Is it not supposed to work? Any pointers please?.
=>
=>Normal method call:- (This works)
=> CORBA::String_var sParam = (const char *)"Nothing for now";
=> CORBA::String_var sInput = (const char *)sInputBuf;
=> CORBA::String_var sReturn;
=> refObj->Execute(sParam,sInput,sReturn);
=>
=> cout << (const char *)sReturn; // contains the value set in
=>execute() method.
=>
=>DII method call:- (This does not work)
=> CORBA::String_var sParam = (const char *)"Nothing for now";
=> CORBA::String_var sInput = (const char *)sInputBuf;
=> CORBA::String_var sReturn;
=>
=> CORBA::Request_var req;
=> req = obj->_request("Execute");
=>
=> req->add_in_arg() <<= sParam;
=> req->add_in_arg() <<= sInput;
=> req->add_inout_arg() <<= sReturn;
=>
=> req->set_return_type(CORBA::_tc_boolean);
=>
=> req->invoke();
=>
=> if( req->env()->exception() ) {
=> cerr << "Test : An exception was thrown while invoking a
=>corba method!" << endl;
=> return;
=> }
=> cout << (const char *)sReturn; // does not contain the value
=>set in execute() method.
=>
=>I am able to get the 'sParam', 'sInput' values in Execute method. I am
=>also able to get 'sReturn' value in execute() but not the return
value.
=>
=>bool CMyObject::Execute(const char *sParam, const char *sInput, char
=>*&sReturn)
=>{
=> ...
=> sReturn = CORBA::string_dup("Hi");
=>}
=>
=>Regards,
=>Shanmugam.D.
=>
=>