Шаблон-клас 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 інтерфейси для кожного зовнішнього відправлення інтерфейсу. Змінити декларації 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 зовнішніх інтерфейсів.
Заключним кроком є здійснення метод, який буде консультувати (або unadvise) всі точки з'єднання в належний час. Цей консультування повинно бути зроблено перед спілкування між зовнішніми клієнтами і ваш об'єкт може зайняти місце. Перед тим, як ваш об'єкт стає видимою, кожного зовнішнього відправлення інтерфейс підтримує ваш об'єкт сумніви на вихідні інтерфейси. Таке підключення, і посилання на вихідний інтерфейсу використовується для обробки подій від керування. Ця процедура має назву "консультування".
Після завершення вашої об'єкт із зовнішніх інтерфейсів вихідні інтерфейси повинен бути повідомлений що вони більше не використовуються COM-об'єкта. Цей процес називається "unadvising".
З-за унікальну природу об'єкти COM Ця процедура змінюється, в деталях і виконання, між реалізацій. Ці деталі виходять за рамки цієї теми і не розглядається.