1

我有以下 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()但似乎没有任何效果。感谢您的帮助!

4

1 回答 1

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

于 2013-04-17T20:08:31.347 回答