Поддержка IDispEventImpl

Шаблон класса IDispEventImpl может использоваться для предоставления поддержки для точек подключения в ATL COM-объект. Точка подключения позволяет объекту COM для обработки событий, выпущенных из внешних COM-объектов. Эти точки соединения сопоставляются с картой приемников событий, предоставленных COM-объекта.

Для должным образом реализовать точки подключения или очки для COM-объекта, необходимо выполнить следующие шаги:

В этой процедуре будет изменен только заголовочный файл (.h) COM-класса.

Импорт библиотеки типов

Для каждого внешнего объекта события, которого вы хотите обрабатывать необходимо импортировать библиотеку типов. Этот шаг определяет события, которые могут быть обработаны и предоставляет информацию, используемую при объявлении карта приемника событий. Директива # Import может использоваться для этого. Добавьте необходимые директивы # import директивы строки для каждого интерфейса диспетчеризации, которые будут поддерживать в заголовочный файл (.h) COM-класса.

В следующем примере производится импорт библиотеки типов внешнего COM-сервера ( MyServer ):

 # Import "D:\MyServer.dll" raw_interfaces_only, no_namespace, named_guids

Примечание   Вам необходимо иметь отдельный # Import заявление для каждого интерфейса внешнего направления, которые будут поддерживать.

Объявление IDispEventImpl интерфейсов

Теперь, когда импорта библиотек типов каждого интерфейса диспетчеризации, необходимо объявить отдельных интерфейсов IDispEventImpl для каждого внешнего диспетчеризации интерфейса. Измените объявление класса COM, добавляя объявление интерфейса IDispEventImpl для каждого внешнего объекта. Для получения дополнительных сведений о параметрах см IDispEventImpl.

Следующие строки кода объявляют две точки подключения, для настраиваемых IExtEvents1 и IExtEvents2 интерфейсов для COM-объекта, реализуемые классомCMyObj:

государственные IDispEventImpllt; 0, CMyObj & DIID__IExtEvents1,
    & LIBID_EXTEVENTS1Lib, 1, 0 >,
государственные IDispEventImpl < 1, CMyObj и DIID__IExtEvents2,
    & LIBID_EXTEVENTS2Lib, 1, 0 & gt

Объявление картой приемника событий

Для того чтобы уведомления о событиях для обработки для правильной работы COM-объект должен направить каждое событие его правильный обработчик. Это достигается путем объявления картой приемника событий.

ATL обеспечивает несколько макросов, BEGIN_SINK_MAP, END_SINK_MAPи SINK_ENTRY, которые делают проще это сопоставление. Стандартный формат:

BEGI&N_SINK_MAP(comClass)
 nbsp; SINK_ENTRY (id, идентификатор dispid, func)
... //additional внешнее событие записей
END_SINK_MAP()

В следующем примере объявляется картой приемника событий с двумя обработчиками событий:

BEGIN_SINK_MAP(CMyObj)
   SINK_ENTRY (0, Events1, OnClick1)
   SINK_ENTRY (0, Events2, OnClick2)
END_SINK_MAP()

Осуществление является почти полной. Последний шаг касается авизующих и unadvising из внешних интерфейсов.

Консультирование и Unadvising IDispEventImpl интерфейсов

Последним шагом является реализация метода, который будет консультировать (или unadvise) все точки соединения в надлежащее время. Это консультирование должно быть сделано до того, как связь между внешними клиентами и ваш объект может иметь место. Прежде чем ваш объект становится видимым, каждый ваш объект поддерживает интерфейс внешнего диспетчера запрашивается для исходящих интерфейсов. Соединения и ссылки на исходящий интерфейс используется для обработки событий элемента управления. Эта процедура называется «консультирование».

После того, как ваш объект заканчивает с внешними интерфейсами, следует уведомлять исходящих интерфейсов, что они больше не используется COM-объектом. Этот процесс называется «unadvising».

Из уникальной природы объектов COM эта процедура различается в деталях и исполнения, между реализациями. Эти детали выходит за рамки данной темы и не рассматриваются.

Index