Diese Makros geben ein Objekt Schnittstellen in der COM-Zuordnung, so dass sie von QueryInterfacezugegriffen werden kann. Die Reihenfolge der Einträge in der COM-Zuordnung ist, dass die Bestellung Schnittstellen während QueryInterface für eine passende IID überprüft werden.
Jedes Objekt, das die Schnittstellen über QueryInterface verfügbar machen will, muss eigene COM-Zuordnung. Der COM-Zuordnung beginnt mit dem Makro BEGIN_COM_MAP. Schnittstelle Einträge werden mit einem oder mehreren der COM_INTERFACE_ENTRY Makros hinzugefügt, und die Karte wird mit dem Makro END_COM_MAP abgeschlossen. Zum Beispiel:
BEGI&N_COM_MAP(CMyObject)
Nbsp; COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IMyObject)
(END_COM_MAP)
Finden Sie unter die ATL COMMAP -Beispiel für Beispiele für die Verwendung der verschiedenen Typen von COM Eintrag Makros anzeigen.
Beachten Sie, dass der erste Eintrag in der COM-Zuordnung eine Schnittstelle für das Objekt mit der COM-Zuordnung sein muss. So kann nicht starten Ihre COM-Zuordnungseinträgen mit COM_INTERFACE_ENTRY_CHAIN, wodurch der COM-Zuordnung eines anderen Objekts zu dem Zeitpunkt gesucht werden wo COM_INTERFACE_ENTRY_CHAIN (COtherObject) in Ihrem Objekt COM-Zuordnung angezeigt. Wenn Sie die COM-Zuordnung von einem anderen Objekt zuerst suchen, einen Schnittstelle Eintrag für IUnknown COM-Zuordnung hinzufügen möchten, dann verketten Sie, das andere Objekt COM-Zuordnung. Zum Beispiel:
BEGI&N_COM_MAP(CThisObject)
Nbsp; COM_INTERFACE_ENTRY(IUnknown)
COM_INTERFACE_ENTRY_CHAIN(COtherObject)
(END_COM_MAP)
Vorsicht &Nbsp; Ab der Version 3.0, ATL verwendet das Compilerschlüsselwort __uuidof ( Klasse ) , um die entsprechende IID für eine bestimmte Klasse abzurufen. Aufgrund von Änderungen in die COM_INTERFACE_ENTRY Makros in Version 3.0 wirksam können Sie jetzt einfach den Header für die Schnittstelle zu verwenden, anstatt auch Verknüpfung mit einer Bibliothek, die die übereinstimmenden IIDs für die Schnittstelle definiert. Diese Änderung kann Probleme verursachen, wenn der Header zuvor durch eine ältere Version von MIDL generiert wurde, oder wenn es war Hand-codiert und nicht entsprechend gekennzeichnet. Wenn die Deklaration für die Schnittstelle in der Kopfzeile nicht markiert wurde mit einer zugeordneten __declspec ( Uuid ), und jeder Versuch, das Schlüsselwort __uuidof verwenden für diese Schnittstelle fehl. Sie können die älteren (ATL 2.x) COM_INTERFACE_ENTRY Makros Wiederherstellen durch die Definition von _ATL_NO_UUIDOF in den Buildeinstellungen, um Probleme mit diesem neuen Verhalten zu umgehen.
Im folgenden werden die verfügbaren Eintrag Makros:
Eingabemakros für COM