2013-04-13 25 views
1

我有以下的IDL接口:通DII出論點的Java CORBA

interface ItemA : Item { 
    void actionA(in float a, out long b); 
    }; 

在我的Java實現,我想調用操作actionA動態(DII使用)。這裏的item對象實現了Item接口,因此對actionA一無所知。以下是片段:

org.omg.CORBA.Request r = item._request("actionA"); 
r.add_in_arg().insert_float(a); 
// add the out argument 
r.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_void)); 
r.invoke(); 
// get the out argument result 

我該如何填寫這些空白?我嘗試過各種方法,主要是r.add_out_arg()的不同用途,但似乎沒有任何工作。我會感謝您的幫助!

回答

1

試試這個:

org.omg.CORBA.Request r = item._request("actionA"); 
r.add_in_arg().insert_float(a); 
Any val = r.add_out_arg(); 
val.type(orb.get_primitive_tc(TCKind.tk_long)); 
r.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_void)); 
r.invoke(); 

if(r.env().exception() == null) 
{ 
    System.out.println("returned: " + r.arguments().item(1).value().extract_long()); 
} 

它爲我(我已經看到了這一點IDL某處...:P)。

+0

奇怪的tu偶然發現了你自己的大學的人。 BTW。你當然意識到,現在有點太晚了:) – Wojtek