Зарегистрируйте события нескольких объектов, используя DispEventAdvise

У меня есть класс, который наследует от «DispEventAdvise» (для outlook2010, но это не важно):

class item_2010_event_handler :
public IDispEventSimpleImpl<IDC_OUTLOOK_ITEM_2010_EVENTS,
item_2010_event_handler,
&outlook_item_2010_ev_id>

Теперь я хочу зарегистрировать один экземпляр item_2010_event_handler для получения событий от нескольких объектов, поэтому я вызываю DispEventAdvise () несколько раз (один раз для каждого объекта), но со второго раза, когда я вызываю DispEventAdvise (), я получаю исключение «Неизвестная ошибка» из функции.

Возможно ли это не поддерживается? И если нет, то почему???

Если это возможно, что я пропускаю (очевидно, я добавлю больше кода, если это необходимо …)?

2

Решение

Каждая «копия» IDispEventSimpleImpl вы наследуете от так называемого «cookie» — значение, которое вы возвращаете в точку подключения позже, когда вам нужно отключить / отключиться от событий. Было сказано, что, IDispEventSimpleImpl Класс (обратите внимание на слово «простой» в названии) поддерживает только одно соединение.

Ваш выбор:

  1. перезапись IDispEventSimpleImpl класс, чтобы класс замены мог подключаться к нескольким точкам, правильно управляя соединениями
  2. создайте один вспомогательный экземпляр класса приемника точки подключения для каждого подключения, затем переадресовывайте обратные вызовы владельцу, заставляя его собирать вызовы из нескольких источников — рекомендуемые
  3. наследовать несколько раз от разных IDispEventSimpleImpl базы для поддержки большего количества (фиксированное количество — не хватает гибкости, хорошо для нескольких соединений, по одному на тип источника) соединений в одном экземпляре
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]