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
可能會導致模組大小略大,因為它未針對匯總或非匯總的物件進行優化,如同 CComAggObject
和 CComObject
。
如果在物件的類別定義中指定了DECLARE_POLY_AGGREGATABLE宏, CComPolyObject
將會用來建立物件。 如果您使用 ATL 專案精靈建立完整控制項或 Internet Explorer 控制項,則會自動宣告DECLARE_POLY_AGGREGATABLE。
如果匯總,則 CComPolyObject
物件有自己的 IUnknown
,與外部物件的 分開,並維護其本身的 IUnknown
參考計數。 CComPolyObject
會使用 CComContainedObject 委派給外部未知。
如需匯總的詳細資訊,請參閱 ATL COM 物件 的基本概念一文 。
繼承階層架構
CComObjectRootBase
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 ,以及您想要在 物件上支援的任何其他介面。
備註
IUnknown
m_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 值。
備註
對於匯總物件,如果要求的介面為 IUnknown
, QueryInterface
則會傳回匯總物件本身 IUnknown
的指標,並遞增參考計數。 否則,這個方法會透過 CComContainedObject
資料成員查詢介面, m_contained 。
CComPolyObject::Release
遞減 物件的參考計數。
STDMETHOD_(ULONG, Release)();
傳回值
在偵錯組建中, Release
傳回可能對診斷或測試很有用的值。 在非偵錯組建中, Release
一律會傳回 0。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應