Fundamentals of ATL COM Objects
用來定義 ATL COM 物件的下圖說明類別之間的關聯性和介面。
注意事項 |
---|
圖表運算式, CComObjectCYourClass 從衍生,而 CComAggObject 和 CComPolyObject 包括 CYourClass 做為成員變數。 |
有三種定義 ATL COM 物件。 標準選項是使用從 CYourClass衍生的 CComObject 類別。 第二個選項是建立彙總物件使用 CComAggObject 類別。 第三個選項是使用 CComPolyObject 類別。 CComPolyObject 做為混合:它可以做為 CComObject 類別或做為 CComAggObject 類別,視先建立。 如需如何使用 CComPolyObject 類別的詳細資訊,請參閱 CComPolyObject Class。
當您使用標準 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 和彙總的模型。建立彙總物件
列出使用所建立的彙總物件步驟。