Получение COM-событий - PullRequest
       18

Получение COM-событий

1 голос
/ 18 января 2009

Без:

  • АТЛ
  • MFC

Примечание:

  • Обычный C ++
  • Вне процесса COM-объект / сервер
  • Предопределенный файл TLB

Вопрос:

  • Как реализовать исходящий интерфейс , чтобы COM-объект мог уведомлять сток о событиях?
  • Как правильно обработать событие после получения?

Ниже приведена функция события, которую я хотел бы реализовать - из TLB file:

inline HRESULT IS8SimulationEvents::S8SimulationEndRun ( ) {
    HRESULT _result = 0;
    _com_dispatch_method(this, 0x2, DISPATCH_METHOD, VT_ERROR, (void*)&_result, NULL);
    return _result;
}

Привет

1 Ответ

2 голосов
/ 18 января 2009

Реализация интерфейса источника в классе COM-сервера. Вам следует внедрить IConnectionPointcontainer, если вы не используете ATL.

В клиентском классе вызовите COM-сервер, как указано ниже. 1. Вызовите FindConnectionPointContainer 2. Позвоните в FindConnectionPoint 3. Вызовите Advise для указателя интерфейса, возвращенного на шаге 2, мы должны предоставить IUnknown указатель объекта приемника. Advise возвращает cookie, чтобы мы могли использовать его при вызове неадекватного пользователя.

Для обработки событий вы можете сделать это двумя способами один, использующий метод Invoke IDispatch для разрешения вызовов на стороне клиента другое - сам сервер вызывает определенный метод Sink. Оба метода используют указатель IUnknown, который он получает, советуя.

...