【问题标题】:How can I pass objects as parameter using IDL如何使用 IDL 将对象作为参数传递
【发布时间】:2016-12-07 18:58:16
【问题描述】:

我是 idl 的新手,corba。我有一个 java 代码,我想通过使用它的一个方法来分发,这个方法需要另一个类的对象作为参数。请问如何使用idl指定这个场景。

public void receive(Receiver rec, Message msg) {
    rec.treatMessage(msg);
}

这是我尝试定义为我的idl

module talk {
  struct Message{
    string msg;
    double time;
  };
  typedef Received Receiver;
  interface Contract{
    void receive(in Receiver rec, in Message msg);
  };
};

每次我对 idlj 运行它时,我都会不断收到“已接收”是一个未声明的类型。 请问我该如何解决这个问题?

谢谢。

【问题讨论】:

    标签: java corba idl


    【解决方案1】:

    你必须用操作treatMessage声明一个Receiver类型的接口,就像你用操作receive声明一个Contract类型的接口一样。或者做

    module talk {
      struct Message{
        string msg;
        double time;
      };
      interface Receiver{
        void receive(in Message msg);
      };
    };
    

    【讨论】:

    • 这是否意味着如果我将 Receiver 类声明为接口,我将授予对它的远程访问权限?如果是,我不希望这种情况发生
    • 是的,在您将 Receiver 声明为接口的那一刻,您可以远程访问它。
    • 我不希望这种情况发生。
    • 一种选择是使它成为一个看起来像接口和结构之间的交叉的值类型,您可以将其值从一个系统移动到另一个系统,但使用起来稍微复杂一些。也许退后一步,先描述一下你的真正需求。
    • 我研究了 valuetype,对于像我这样的初学者来说似乎很复杂。然后我偶然发现了 idl 中的 Object,它映射到 java 中的 org.omg.CORBA.Object。我不知道我是否走在正确的轨道上,但似乎值得一看。
    猜你喜欢
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2018-08-02
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多