私はCORBAを初めて使用しています。私は呼び出したいメソッドにパラメータを正しく渡すことに苦労しています。この方法は、IDL
署名C++ CORBAメソッドの実装へのパラメータの受け渡し
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
タイプに変換するのかを知っていますか?私が必要としたのは、参照を渡すことだけでした。
IPlanningUpdateListener_impl* listener // initialised and registered earlier
OpStatus opStatus;
myClass->addUpdateListener(opStatus, listener);
私の二つの質問は、私は、このメソッドは、パラメータとしてIPlanningUpdateListenerの私の実装を受け入れるように得るかと私はomniidl
が作成したOpStatus_out型にOpStatus構造体に変換するために何をすべきかが必要なのですかどのようにしていますか?
'_objref_IPlanningUpdateListener *'は、あなたのORBに固有の内部型です。シグネチャを 'IPlanningUpdateListener_ptr'に変更すると、あなたのimplは移植性が向上します。 –