在 Java CORBA 中传递 DII 参数

Posted

技术标签:

【中文标题】在 Java CORBA 中传递 DII 参数【英文标题】:Pass DII out-argument in Java CORBA 【发布时间】:2013-04-13 13:56:02 【问题描述】:

我有以下 IDL 接口:

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

在我的 Java 实现中,我想动态调用操作 actionA(使用 DII)。这里的item 对象实现了Item 接口,因此对actionA 一无所知。这是sn-p:

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

【讨论】:

奇怪你在 SO 上偶然发现了来自你自己大学的人。顺便提一句。你当然意识到,现在有点太晚了:)

以上是关于在 Java CORBA 中传递 DII 参数的主要内容,如果未能解决你的问题,请参考以下文章

CORBA 和 RMI 的区别

值传递和引用传递

如何使用拦截器在 CORBA 中操作发送到远程对象的参数

传递数组或序列以在 idl Java Corba 中运行

CORBA IIOPNet 和 OmniORBpy,带有值类型参数的远程方法调用问题

java传递参数问题