共用方式為


CComPolyObject 類別

這個類別會 IUnknown 針對匯總或非匯總的物件實作。

語法

template<class contained>
class CComPolyObject : public IUnknown,
      public CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>

參數

包含
您的類別衍生自 CComObjectRoot CComObjectRootEx ,以及您想要在 物件上支援的任何其他介面。

成員

公用建構函式

名稱 描述
CComPolyObject::CComPolyObject 建構函式。
CComPolyObject::~CComPolyObject 解構函式。

公用方法

名稱 描述
CComPolyObject::AddRef 遞增物件的參考計數。
CComPolyObject::CreateInstance (靜態)可讓您建立新的 CComPolyObject contained>< 物件,而不需要 CoCreateInstance 的額外 負荷。
CComPolyObject::FinalConstruct 執行 的最終初始化 m_contained
CComPolyObject::FinalRelease 執行 的最終解構 m_contained
CComPolyObject::QueryInterface 擷取所要求介面的指標。
CComPolyObject::Release 遞減物件的參考計數。

公用資料成員

名稱 描述
CComPolyObject::m_contained IUnknown如果物件已匯總,或 IUnknown 未匯總物件,則委派對外部未知物件的呼叫。

備註

CComPolyObject 實作匯總或非匯總物件的 IUnknown

建立 的實例 CComPolyObject 時,會檢查外部未知的值。 如果是 Null, IUnknown 則會針對非匯總物件實作。 如果外部未知不是 Null, IUnknown 則會針對匯總物件實作。

使用 CComPolyObject 的優點是避免在模組中同時擁有 CComAggObject 和 CComObject 來處理匯總和非匯總案例。 單 CComPolyObject 一物件會處理這兩種情況。 這表示只有一份 vtable 和一份函式存在於您的模組中。 如果您的 vtable 很大,這可能會大幅減少模組大小。 不過,如果您的 vtable 很小,使用 CComPolyObject 可能會導致模組大小略大,因為它未針對匯總或非匯總的物件進行優化,如同 CComAggObjectCComObject

如果在物件的類別定義中指定了DECLARE_POLY_AGGREGATABLE宏, CComPolyObject 將會用來建立物件。 如果您使用 ATL 專案精靈建立完整控制項或 Internet Explorer 控制項,則會自動宣告DECLARE_POLY_AGGREGATABLE。

如果匯總,則 CComPolyObject 物件有自己的 IUnknown ,與外部物件的 分開,並維護其本身的 IUnknown 參考計數。 CComPolyObject 會使用 CComContainedObject 委派給外部未知。

如需匯總的詳細資訊,請參閱 ATL COM 物件 的基本概念一文

繼承階層架構

CComObjectRootBase

CComObjectRootEx

IUnknown

CComPolyObject

需求

標頭: atlcom.h

CComPolyObject::AddRef

遞增 物件的參考計數。

STDMETHOD_(ULONG, AddRef)();

傳回值

對於診斷或測試而言可能很有用的值。

CComPolyObject::CComPolyObject

建構函式。

CComPolyObject(void* pv);

參數

光伏
[in]如果要匯總物件,則為外部未知的指標,如果物件未匯總,則為 Null。

備註

CComContainedObject初始化資料成員, m_contained ,並遞增模組鎖定計數。

解構函式會遞減模組鎖定計數。

CComPolyObject::~CComPolyObject

解構函式。

~CComPolyObject();

備註

釋放所有已配置的資源、呼叫 FinalRelease ,並遞減模組鎖定計數。

CComPolyObject::CreateInstance

可讓您建立新的 CComPolyObject contained>< 物件,而不需要 CoCreateInstance 的額外 負荷。

static HRESULT WINAPI CreateInstance(
    LPUNKNOWN pUnkOuter,
    CComPolyObject<contained>** pp);

參數

Pp
[out]CComPolyObject >contained< 指標的 指標。 如果 CreateInstance 失敗, pp 會設定為 Null。

傳回值

標準 HRESULT 值。

備註

傳回的物件具有零的參考計數,因此立即呼叫 AddRef ,然後在完成時,使用 Release 釋放物件指標上的參考。

如果您不需要直接存取物件,但仍想要建立沒有額外負荷 CoCreateInstance 的新物件,請改用 CComCoClass::CreateInstance

CComPolyObject::FinalConstruct

在物件建構的最後階段呼叫,此方法會對m_contained 資料成員執行任何最終初始化

HRESULT FinalConstruct();

傳回值

標準 HRESULT 值。

CComPolyObject::FinalRelease

在物件解構期間呼叫,此方法會 釋放m_contained 資料成員。

void FinalRelease();

CComPolyObject::m_contained

衍生 自類別的 CComContainedObject 物件。

CComContainedObject<contained> m_contained;

參數

包含
[in]您的類別衍生自 CComObjectRoot CComObjectRootEx ,以及您想要在 物件上支援的任何其他介面。

備註

IUnknownm_contained如果匯總物件,呼叫會委派給外部未知的 ,如果物件未匯總,則委派給 IUnknown 這個物件的 。

CComPolyObject::QueryInterface

擷取所要求介面的指標。

STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT QueryInterface(Q** pp);

參數

Q
COM 介面。

Iid
[in] 所要求介面的識別碼。

ppvObject
[out]由 iid 識別 之介面指標的指標。 如果物件不支援這個介面, ppvObject 會設定為 Null。

Pp
[out]所識別 __uuidof(Q) 介面的指標。

傳回值

標準 HRESULT 值。

備註

對於匯總物件,如果要求的介面為 IUnknownQueryInterface 則會傳回匯總物件本身 IUnknown 的指標,並遞增參考計數。 否則,這個方法會透過 CComContainedObject 資料成員查詢介面, m_contained

CComPolyObject::Release

遞減 物件的參考計數。

STDMETHOD_(ULONG, Release)();

傳回值

在偵錯組建中, Release 傳回可能對診斷或測試很有用的值。 在非偵錯組建中, Release 一律會傳回 0。

另請參閱

CComObjectRootEx 類別
DECLARE_POLY_AGGREGATABLE
類別概觀