将参数传递给C ++ CORBA方法实现

时间:2011-10-20 16:33:38

标签: c++ parameter-passing corba

我是使用CORBA的新手,我正在努力将参数正确地传递给我想要调用的方法。该方法具有IDL签名

void addUpdateListener(out OpStatus opStatus, in IPlanningUpdateListener listener);

OpStatus是一个定义为

的结构
struct OpStatus {
    EComponent EComp;
    EStatus State;
    string Message;
}
enum EComponent { CompA, CompB, CompC };
enum EStatus { SUCCESS, FAILURE, RETRY };

IPlanningUpdateListener本身就是IDL接口。

我已经实现了类的_impl

void addUpdateListener(OpStatus_out opStatus, _objref_IPlanningUpdateListener* listener)    {
    std::cout << "addUpdateListener called\n";
}

我已经成功地使用ORB注册了我的所有服务,但我不知道如何实际调用此方法。我有一个指向我希望作为监听器添加的服务的指针,但它的类型不正确。有谁知道为什么omniidlIDL中的现有OpStatus和IPlanningUpdateListener类型转换为新的OpStatus_out_objref_IPlanningUpdateListener类型。我想要输出参数,我需要做的就是传递参考。

IPlanningUpdateListener_impl* listener // initialised and registered earlier
OpStatus opStatus; 
myClass->addUpdateListener(opStatus, listener);

我的两个问题是如何让这个方法接受我的IPlanningUpdateListener实现作为参数,我需要做些什么才能将OpStatus结构转换为omniidl创建的OpStatus_out类型? / p>

1 个答案:

答案 0 :(得分:4)

在客户端将OpStatus更改为_var。

OpStatus_var opStatus; 
myClass->addUpdateListener(opStatus, listener);

实现将创建一个新的结构来返回。

void addUpdateListener(OpStatus_out opStatus, _objref_IPlanningUpdateListener* listener)    
{
  opStats = new OpStatus;

...
}