Ці макроси ввести об'єкта інтерфейсів в її COM карта, так що вони можуть бути доступні на QueryInterface. Порядок записів в карті COM є порядок інтерфейсів буде перевірка на відповідність IID під час QueryInterface.
Кожен об'єкт, який хоче, щоб викрити її інтерфейсів, через QueryInterface повинні мати свої власні карти COM. Карта COM починається з макросу BEGIN_COM_MAP. Інтерфейс записи додаються з одного або більше COM_INTERFACE_ENTRY макросів, і карта завершено з END_COM_MAP макросів. Наприклад:
BEGI&N_COM_MAP(CMyObject)
nbsp; COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IMyObject)
END_COM_MAP)
Див в ATL COMMAP зразком для приклади використання різних типів COM карта запис макросів.
Зверніть увагу, що перший запис у карті COM повинні бути інтерфейс на об'єкті, що містить карту COM. Таким чином, не вдається запустити COM карта записи з COM_INTERFACE_ENTRY_CHAIN, який викликає COM карта інший об'єкт для пошуку в точці, де COM_INTERFACE_ENTRY_CHAIN (COtherObject) з'явиться у вашому об'єкт COM карта. Якщо ви хочете, щоб пошук карта COM іншого об'єкта спочатку, додати елемент інтерфейсу для IUnknown до COM карти, то ланцюг інший об'єкт COM карта. Наприклад:
BEGI&N_COM_MAP(CThisObject)
nbsp; COM_INTERFACE_ENTRY(IUnknown)
COM_INTERFACE_ENTRY_CHAIN(COtherObject)
END_COM_MAP)
Застереження nbsp; Починаючи з версії 3.0, ATL використовує ключове слово компілятор __uuidof ( класу ) для отримання відповідного IID для даного класу. З-за змін у макроси COM_I&NTERFACE_ENTRY ефективним у версії 3.0 тепер ви просто включити заголовок для інтерфейсу, використання, замість того, щоб також посилання на бібліотеку, яка визначає зіставлення ідентифікаторів IID для цього інтерфейсу. Ця зміна може спричинити проблеми, якщо заголовок раніше була породжена стару версію MIDL або було закодовані руки і не позначені належним чином. Якщо декларації для інтерфейсу у заголовку не позначений з відповідного __declspec ( uuid ), то будь-яка спроба використовувати ключове __uuidof для цього інтерфейсу не вдасться. Можна повернутися до старих макросів COM_INTERFACE_ENTRY (ATL 2. x) шляхом визначення _ATL_NO_UUIDOF в настройках побудувати для усунення будь-яких проблем з цієї нової поведінки.
Нижче наведено доступні запис макросів:
COM карта запис макросів