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 進行程式設計的概念性主題連結。