Я новичок в использовании 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
преобразует существующие типы OpStatus и IPlanningUpdateListener в IDL
в новые типы OpStatus_out
и _objref_IPlanningUpdateListener
. Я подумал, что для параметров мне нужно только передать ссылку.
IPlanningUpdateListener_impl* listener // initialised and registered earlier
OpStatus opStatus;
myClass->addUpdateListener(opStatus, listener);
Мои два вопроса: как мне заставить этот метод принять мою реализацию IPlanningUpdateListener в качестве параметра и что мне нужно сделать, чтобы преобразовать структуру OpStatus в тип OpStatus_out, созданный omniidl
?