Te makra wprowadź obiektu interfejsów do jego mapę COM tak, że jest możliwy przez QueryInterface. Kolejność wpisów w planie COM jest że interfejsy zamówienia będzie sprawdzana pasujące IID podczas QueryInterface.
Każdy obiekt, który chce, aby jego interfejsy za pośrednictwem metody QueryInterface musi mieć własną mapę COM. Mapa COM zaczyna się od makro BEGIN_COM_MAP. Interfejs wpisy są dodawane z jednym lub kilkoma z makra COM_INTERFACE_ENTRY i mapy zostaje uzupełniona makro END_COM_MAP . Na przykład:
BEGI&N_COM_MAP(CMyObject)
nbsp; COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IMyObject)
(END_COM_MAP)
Zobacz ATL COMMAP próbki do przykładów użycia różnych rodzajów COM mapę makra wejściowe.
Należy zauważyć, że pierwszy wpis na mapie modelu COM musi być interfejsem na obiekt zawierający mapę COM. W związku z tym, nie można uruchomić wpisy mapę COM z COM_INTERFACE_ENTRY_CHAIN, który powoduje Mapa COM inny obiekt ma zostać wyszukany w punkcie, w którym COM_INTERFACE_ENTRY_CHAIN (COtherObject) pojawia się w Twojej obiektu COM mapę. Jeśli chcesz najpierw przeszukiwane Mapa COM innego obiektu, Dodaj wpis interfejs IUnknown do mapy COM, następnie łańcucha innych obiektów COM mapę. Na przykład:
BEGI&N_COM_MAP(CThisObject)
nbsp; COM_INTERFACE_ENTRY(IUnknown)
COM_INTERFACE_ENTRY_CHAIN(COtherObject)
(END_COM_MAP)
Przestroga nbsp; Począwszy od wersji 3.0, ATL wykorzystuje słowo kluczowe kompilatora __uuidof ( klasy ) Aby uzyskać odpowiedni identyfikator IID dla danej klasy. Ze względu na zmiany w makrach COM_I&NTERFACE_ENTRY skuteczne w wersji 3.0 teraz możesz po prostu zawiera nagłówek dla tego interfejsu, aby użyć, zamiast na również łączenie z biblioteki, w której definiuje IID pasujące dla tego interfejsu. Ta zmiana może spowodować problemy, jeśli nagłówek wcześniej został wygenerowany przez starszą wersję MIDL lub został kodowane dłoni i nie oznaczone odpowiednio. Jeśli nie została oznaczona deklaracji dla interfejsu w nagłówku ze skojarzonego __declspec ( uuid ), a następnie każda próba użycia słowa kluczowego __uuidof dla tego interfejsu zakończy się niepowodzeniem. Definiując _ATL_NO_UUIDOF w ustawieniach kompilacji w celu obejścia problemów z to nowe zachowanie można przywrócić starsze makra COM_INTERFACE_ENTRY (ATL 2.x).
Są następujące makra dostępne wejścia:
Makra wejściowe COM mapę