ATL COM 物件的基本概念
用來定義 ATL COM 物件的下圖說明類別之間的關聯性和介面。
注意事項 |
---|
圖表運算式, CComObjectCYourClass 從衍生,而 CComAggObject 和 CComPolyObject 包括 CYourClass 做為成員變數。 |
有三種定義 ATL COM 物件。標準選項是使用從 CYourClass衍生的 CComObject 類別。第二個選項是建立彙總物件使用 CComAggObject 類別。第三個選項是使用 CComPolyObject 類別。CComPolyObject 做為混合:它可以做為 CComObject 類別或做為 CComAggObject 類別,視先建立。如需如何使用 CComPolyObject 類別的詳細資訊,請參閱 CComPolyObject 類別。
當您使用標準 ATL COM 時,可以使用兩個物件:外部物件和內建 (Intrinsic) 物件。外部用戶端透過外部物件定義的包裝函式來存取內部物件的功能。外部物件屬於型別 CComObject。
當您使用彙總物件時,外部物件為內部物件的功能會提供包裝函式。相反地,外部物件提供外部用戶端直接存取的指標。在這個案例中,外部物件屬於型別 CComAggObject。內部物件是外部物件的成員變數,因此,它是型別 CYourClass。
由於用戶端不必透過外部物件與內部物件互動,彙總物件通常會更有效率。此外,外部物件不需要了解彙總物件的功能,只要彙總物件的介面直接供用戶端使用。不過,並非所有的物件可彙總。如果要彙總物件,需要設計時未彙總。
以兩個階段的 ATL 實作 IUnknown :
CComObject、 CComAggObject或 CComPolyObject 實作 IUnknown 方法。
CComObjectRoot 或 CComObjectRootEx 處理 IUnknown參考次數和外部指標。
您的 ATL COM 物件的其他方面由其他類別處理:
CComCoClass 定義物件的預設 Class Factory 和彙總模型。
在IDispatchImpl 物件提供所有雙重介面的 IDispatch Interface 部分的預設實作。
ISupportErrorInfoImpl 實作來確定的 ISupportErrorInfo 介面錯誤訊息進行正確傳播呼叫鏈結。
本章節內容
實作 CComObjectRootEx
顯示範例 COM 實作的 CComObjectRootEx對應項目。實作 CComObject、CComAggObject 和 CComPolyObject
討論 DECLARE_*_AGGREGATABLE 巨集如何影響使用 CComObject、 CComAggObject和 CComPolyObject。支援 IErrorInfo 和 IDispatch
列出實作 ATL 類別支援 IDispatch 和 IErrorInfo 介面使用。支援 IDispEventImpl
討論同步實作自己的類別的連接點。變更預設 Class Factory 和彙總模型
顯示要用於巨集來變更預設 Class Factory 和彙總的模型。建立彙總物件
列出使用所建立的彙總物件步驟。