저는 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
인터페이스이다. 내가 제대로 ORB와 내 모든 서비스를 등록 관리했습니다하고 있지만 실제로이 방법을 호출하는 방법을 모르는
void addUpdateListener(OpStatus_out opStatus, _objref_IPlanningUpdateListener* listener) {
std::cout << "addUpdateListener called\n";
}
처럼 클래스의
_impl
구현했습니다
보인다. 리스너로 추가하려는 서비스에 대한 포인터가 있지만 올바른 유형이 아닙니다. 누구도 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이 더 이식성이 높아집니다. –