COM_INTERFACE_ENTRY 巨集
這些巨集輸入物件的介面輸入它的 COM 對應,以供 QueryInterface存取。在 QueryInterface,輸入順序 COM 對應的是命令介面將會檢查符合的 IID 。
若要透過 QueryInterface 公開其介面中的每個物件都必須有自己的 COM 對應。COM 對應開始巨集 BEGIN_COM_MAP。介面項目將具有一或多個 COM_INTERFACE_ENTRY 巨集,,和對應完成 END_COM_MAP 巨集。例如:
BEGIN_COM_MAP(CMyObject)
COM_INTERFACE_ENTRY(IMyObject)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
請注意在 COM 對應的第一個元素必須是包含 COM 對應的物件的介面。因此,您無法啟動與 COM_INTERFACE_ENTRY_CHAIN的 COM 對應項目,產生不同的物件 COM 對應會搜尋在按 COM_INTERFACE_ENTRY_CHAIN(COtherObject) 出現在您的物件的 COM 對應。如果您想要先搜尋其他物件的 COM 對應,請將 IUnknown 的介面項目加入至您的 COM 對應,則繫結至另一個物件的 COM 對應。例如:
BEGIN_COM_MAP(CThisObject)
COM_INTERFACE_ENTRY(IUnknown)
COM_INTERFACE_ENTRY_CHAIN(CBase)
END_COM_MAP()
警告 |
---|
根據 3.0 版, ATL 使用編譯器關鍵字 __uuidof( class ) 取得指定之類別的對應的 IID。因為是在 COM_INTERFACE_ENTRY 巨集中的變更有效在 3.0 版中,您現在包含介面的標題可以使用,而不是同時連接至定義該介面的 IID 相符的程式庫。這項變更可能會造成問題,如果標題是由 MIDL 舊版之前產生,則為;如果手動適當地編碼且未標記。如果介面的宣告在標題未標記為關聯的 __declspec( uuid ),則嘗試為該介面 __uuidof 使用關鍵字將會失敗。您可以還原成舊版 (ATL 2.x) COM_INTERFACE_ENTRY 巨集也會定義在組建組態的 _ATL_NO_UUIDOF 至任何問題的工作的這個新的行為。 |
COM 對應項巨集
以下為可用的項目巨集:
需求
Header: atlcom.h