我有以下IDL接口:
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()
的不同用法,但似乎没有任何效果。我很感激你的帮助!
答案 0 :(得分: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());
}
它对我有用(我已经在某处看到了这个...:P)。