将参数传递给 C++ 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 正确注册了所有服务,但我不知道如何实际调用此方法。我有一个指向我想要添加为侦听器的服务的指针,但它的类型不正确。有谁知道为什么omniidl
将IDL
中现有的OpStatus和IPlanningUpdateListener类型转换为新的OpStatus_out
和_objref_IPlanningUpdateListener
类型。我认为对于 out 参数,我所需要做的就是传递一个引用。
IPlanningUpdateListener_impl* listener // initialised and registered earlier
OpStatus opStatus;
myClass->addUpdateListener(opStatus, listener);
我的两个问题是如何让此方法接受 IPlanningUpdateListener 的实现作为参数,以及我需要做什么才能将 OpStatus 结构转换为 omniidl
创建的 OpStatus_out 类型?
I'm new to using CORBA and I'm struggling with correctly passing the parameters to a method that I want to invoke. The method has the IDL
signature
void addUpdateListener(out OpStatus opStatus, in IPlanningUpdateListener listener);
OpStatus
is a struct defined as
struct OpStatus {
EComponent EComp;
EStatus State;
string Message;
}
enum EComponent { CompA, CompB, CompC };
enum EStatus { SUCCESS, FAILURE, RETRY };
and IPlanningUpdateListener
is itself an IDL
interface.
I've implemented the _impl
of the class looks like
void addUpdateListener(OpStatus_out opStatus, _objref_IPlanningUpdateListener* listener) {
std::cout << "addUpdateListener called\n";
}
I've managed to register all my services with the ORB correctly and but I don't know how to actually call this method. I've got a pointer to the service that I want to be added as a listener but it's not of the correct type. Does anyone know why omniidl
converts the existing OpStatus and IPlanningUpdateListener types in the IDL
into the new OpStatus_out
and _objref_IPlanningUpdateListener
types. I thought for out parameters all I needed to do was pass a reference.
IPlanningUpdateListener_impl* listener // initialised and registered earlier
OpStatus opStatus;
myClass->addUpdateListener(opStatus, listener);
My two questions are how do I get this method to accept my implementation of the IPlanningUpdateListener as a parameter and what do I need to do to convert the OpStatus struct into the OpStatus_out type that the omniidl
has created?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在客户端中将 OpStatus 更改为 _var。
该实现将创建一个新的结构体来返回。
In the client change OpStatus to a _var.
The implementation will create a new struct to return.