共用方式為


CComObjectRootEx Class

這個類別提供方法來處理物件的參考次數。nonaggregated 管理和彙總物件。

template< 
   class ThreadModel  
> 
class CComObjectRootEx : public CComObjectRootBase

參數

Members

方法

CComObjectRootEx

建構函式。

InternalAddRef

將 nonaggregated 物件的參考計數。

InternalRelease

減一 nonaggregated 物件的參考計數。

鎖定

如果執行緒模型多執行緒,取得關鍵區段物件的擁有權。

解除鎖定

如果執行緒模型多執行緒,釋放關鍵區段物件的擁有權。

CComObjectRootBase 方法

FinalConstruct

在您執行任何初始化之類別的覆寫必須由您的物件。

FinalRelease

在您執行任何清除之類別的覆寫必須由您的物件。

OuterAddRef

將彙總物件的參考計數。

OuterQueryInterface

彙總的物件的外部 IUnknown 的委派。

OuterRelease

要彙總的物件的參考計數。

靜態函式

InternalQueryInterface

一 nonaggregated 物件的 IUnknown 的委派。

ObjectMain

會在模組初始化和終止時在物件對應中的衍生類別的。

資料成員

m_dwRef

m_pOuterUnknown,一部分的聯集。 使用時,物件不會彙總保留參考計數 AddRef版本

m_pOuterUnknown

m_dwRef,一部分的聯集。 使用,將物件加以彙總存放指標則外部未知。

備註

CComObjectRootEx 控制代碼物件參考 nonaggregated 和彙總物件的計數管理。 它會保留物件的參考次數,如果物件不可彙總,並保有指標至外部 UNKNOWN,如果您物件的彙總。 對於彙總物件, CComObjectRootEx 方法可用來處理內部物件的失敗] 建構的,因此,保護外部物件遭刪除,而放開內部介面或內部物件刪除。

實作 COM 伺服器的類別必須繼承 CComObjectRootExCComObjectRoot繼承。

如果您的類別定義中指定 DECLARE_POLY_AGGREGATABLE 巨集, ATL CComPolyObject<CYourClass> 建立執行個體,而 IClassFactory::CreateInstance 時呼叫。 在建立時,則外部未知的值進行檢查。 如果是 NULLIUnknown 為 nonaggregated 物件上實作。 如果這個外部未知的參數不是 NULLIUnknown 為彙總的物件上實作。

如果您的類別並未指定 DECLARE_POLY_AGGREGATABLE ATL 巨集,建立執行個體 CAggComObject<CYourClass> 彙總物件的或 CComObject<CYourClass> nonaggregated 物件的執行個體。

使用 CComPolyObject 的優點是您不會處理 CComAggObject 和的 CComObject 於模組彙總和 nonaggregated 情況。 單一 CComPolyObject 物件控制代碼兩種情況。 因此,只有一個複本的 vtable 和函式的一個複本存在於模組。 如果您 vtable 非常大,所以可以大幅降低模組大小。 不過,因此,如果您 vtable 很小,使用 CComPolyObject 可能造成更大的模組大小,因為它沒有為彙總或 nonaggregated 最佳化物件,就像 CComAggObjectCComObject

如果您的物件會彙總, IUnknownCComAggObjectCComPolyObject實作。 這些類別 QueryInterface委派、 AddRef版本 呼叫 CComObjectRootExOuterQueryInterfaceOuterAddRefOuterRelease 轉送至外部未知。 通常,您會覆寫類別中的所有 CComObjectRootEx::FinalConstruct 建立彙總物件,並覆寫 CComObjectRootEx::FinalRelease 釋放任何彙總物件。

如果您的物件不可彙總, IUnknownCComObjectCComPolyObject實作。 在這種情況下, QueryInterface對的呼叫, AddRef版本 委派至 CComObjectRootExInternalQueryInterfaceInternalAddRefInternalRelease 執行實際作業。

需求

Header: atlcom.h

請參閱

參考

CComAggObject Class

CComObject Class

CComPolyObject Class

其他資源

ATL Class Overview