CComObjectRootEx 類別
這個類別提供方法來處理物件的參考次數。nonaggregated 管理和彙總物件。
template<
class ThreadModel
>
class CComObjectRootEx : public CComObjectRootBase
參數
- ThreadModel
方法實作所需的執行緒模型的類別。 您可以設定 ThreadModel 明確選取執行緒模型為 CComSingleThreadModel、 CComMultiThreadModel或 CComMultiThreadModelNoCS。 您可以設定 ThreadModel 接受伺服器的預設執行緒模型。 CComObjectThreadModel 或 CComGlobalsThreadModel。
Members
方法
建構函式。 |
|
將 nonaggregated 物件的參考計數。 |
|
減一 nonaggregated 物件的參考計數。 |
|
如果執行緒模型多執行緒,取得關鍵區段物件的擁有權。 |
|
如果執行緒模型多執行緒,釋放關鍵區段物件的擁有權。 |
CComObjectRootBase 方法
在您執行任何初始化之類別的覆寫必須由您的物件。 |
|
在您執行任何清除之類別的覆寫必須由您的物件。 |
|
將彙總物件的參考計數。 |
|
彙總的物件的外部 IUnknown 的委派。 |
|
要彙總的物件的參考計數。 |
靜態函式
一 nonaggregated 物件的 IUnknown 的委派。 |
|
會在模組初始化和終止時在物件對應中的衍生類別的。 |
資料成員
m_pOuterUnknown,一部分的聯集。 使用時,物件不會彙總保留參考計數 AddRef 和 版本。 |
|
m_dwRef,一部分的聯集。 使用,將物件加以彙總存放指標則外部未知。 |
備註
CComObjectRootEx 控制代碼物件參考 nonaggregated 和彙總物件的計數管理。 它會保留物件的參考次數,如果物件不可彙總,並保有指標至外部 UNKNOWN,如果您物件的彙總。 對於彙總物件, CComObjectRootEx 方法可用來處理內部物件的失敗] 建構的,因此,保護外部物件遭刪除,而放開內部介面或內部物件刪除。
實作 COM 伺服器的類別必須繼承 CComObjectRootEx 或 CComObjectRoot繼承。
如果您的類別定義中指定 DECLARE_POLY_AGGREGATABLE 巨集, ATL CComPolyObject<CYourClass> 建立執行個體,而 IClassFactory::CreateInstance 時呼叫。 在建立時,則外部未知的值進行檢查。 如果是 NULL, IUnknown 為 nonaggregated 物件上實作。 如果這個外部未知的參數不是 NULL, IUnknown 為彙總的物件上實作。
如果您的類別並未指定 DECLARE_POLY_AGGREGATABLE ATL 巨集,建立執行個體 CAggComObject<CYourClass> 彙總物件的或 CComObject<CYourClass> nonaggregated 物件的執行個體。
使用 CComPolyObject 的優點是您不會處理 CComAggObject 和的 CComObject 於模組彙總和 nonaggregated 情況。 單一 CComPolyObject 物件控制代碼兩種情況。 因此,只有一個複本的 vtable 和函式的一個複本存在於模組。 如果您 vtable 非常大,所以可以大幅降低模組大小。 不過,因此,如果您 vtable 很小,使用 CComPolyObject 可能造成更大的模組大小,因為它沒有為彙總或 nonaggregated 最佳化物件,就像 CComAggObject 和 CComObject。
如果您的物件會彙總, IUnknown 由 CComAggObject 或 CComPolyObject實作。 這些類別 QueryInterface委派、 AddRef和 版本 呼叫 CComObjectRootEx 的 OuterQueryInterface、 OuterAddRef和 OuterRelease 轉送至外部未知。 通常,您會覆寫類別中的所有 CComObjectRootEx::FinalConstruct 建立彙總物件,並覆寫 CComObjectRootEx::FinalRelease 釋放任何彙總物件。
如果您的物件不可彙總, IUnknown 由 CComObject 或 CComPolyObject實作。 在這種情況下, QueryInterface對的呼叫, AddRef和 版本 委派至 CComObjectRootEx 的 InternalQueryInterface、 InternalAddRef和 InternalRelease 執行實際作業。
需求
Header: atlcom.h