在Java CORBA中传递DII out-argument

时间:2013-04-13 13:56:03

标签: java corba idl

我有以下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()的不同用法,但似乎没有任何效果。我很感激你的帮助!

1 个答案:

答案 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)。