ATL COM 物件的基本概念
下圖描述用來定義 ATL COM 物件之類別和介面之間的關聯性。
注意
此圖表顯示 CComObject
衍生自 CYourClass
,而 CComAggObject
並 CComPolyObject
包含 CYourClass
為成員變數。
有三種方式可以定義 ATL COM 物件。 標準選項是使用衍生自 CYourClass
的 CComObject
類別。 第二個選項是使用 CComAggObject
類別建立匯總物件。 第三個選項是使用 類別 CComPolyObject
。 CComPolyObject
做為混合式:視第一次 CComObject
建立的方式而定,它可以作為類別或類別 CComAggObject
運作。 如需如何使用 CComPolyObject
類別的詳細資訊,請參閱 CComPolyObject 類別 。
當您使用標準 ATL COM 時,您會使用兩個物件:外部物件和內建物件。 外部用戶端會透過外部物件中定義的包裝函式存取內建物件的功能。 外部物件的類型為 CComObject
。
當您使用匯總物件時,外部物件不會提供內建物件功能的包裝函式。 相反地,外部物件會提供外部用戶端直接存取的指標。 在此案例中,外部物件的類型 CComAggObject
為 。 內建物件是外部物件的成員變數,且屬於 類型 CYourClass
。
由於用戶端不需要經過外部物件來與內建物件互動,因此匯總的物件通常更有效率。 此外,外部物件不需要知道匯總物件的功能,因為匯總物件的介面直接可供用戶端使用。 不過,並非所有物件都可以匯總。 若要匯總物件,必須以匯總為考慮設計物件。
ATL 會在 兩個階段中實作 IUnknown :
CComObject 、 CComAggObject 或 CComPolyObject 會
IUnknown
實作 方法。CComObjectRoot 或 CComObjectRootEx 會管理 的
IUnknown
參考計數和外部指標。
ATL COM 物件的其他層面是由其他類別處理:
CComCoClass 會定義物件的預設類別處理站和匯總模型。
IDispatchImpl 提供物件上任何雙重介面部分的預設實
IDispatch Interface
作。ISupportErrorInfoImpl 會
ISupportErrorInfo
實作介面,以確保可以正確地傳播呼叫鏈結的錯誤資訊。
本節內容
實作 CComObjectRootEx
顯示實作 的 CComObjectRootEx
範例 COM 對應專案。
實作 CComObject、CComAggObject 和 CComPolyObject
討論DECLARE_*_AGGREGATABLE宏如何影響 、 CComAggObject
和 CComPolyObject
的使用 CComObject
。
支援 IDispatch 和 IErrorInfo
列出用於支援 和 IErrorInfo
介面的 IDispatch
ATL 實作類別。
支援 IDispEventImpl
討論實作類別連接點的步驟。
變更預設 Class Factory 和彙總模型
顯示要用來變更預設類別處理站和匯總模型的宏。
建立彙總物件
列出建立匯總物件的步驟。
相關章節
建立 ATL 專案
提供建立 ATL COM 物件的相關資訊。
Atl
提供有關如何使用 Active Template Library 進行程式設計的概念性主題連結。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應