CComPolyObject クラス
このクラスは、集計または非集計オブジェクトの IUnknown
を実装します。
構文
template<class contained>
class CComPolyObject : public IUnknown,
public CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>
パラメーター
contained
CComObjectRoot または CComObjectRootEx から、およびオブジェクトでサポートするその他のインターフェイスから派生するクラス。
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CComPolyObject::CComPolyObject | コンストラクター。 |
CComPolyObject::~CComPolyObject | デストラクター。 |
パブリック メソッド
名前 | 説明 |
---|---|
CComPolyObject::AddRef | オブジェクトの参照カウントをインクリメントします。 |
CComPolyObject::CreateInstance | (静的)CoCreateInstance のオーバーヘッドを発生させずに、新しい CComPolyObject< contained > オブジェクトを作成できます。 |
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 の両方をモジュールに含める必要がないことです。 1 つの CComPolyObject
オブジェクトで両方のケースが処理されます。 つまり、モジュールには、vtable の 1 つのコピーと関数の 1 つのコピーのみが存在します。 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);
パラメーター
pv
[in] オブジェクトが集計されている場合は外部不明へのポインター、オブジェクトが集計されていない場合は NULL。
解説
CComContainedObject
データ メンバー (m_contained) を初期化し、モジュールのロック数をインクリメントします。
モジュールのロック数のデクリメントはデストラクターによって行われます。
CComPolyObject::~CComPolyObject
デストラクター。
~CComPolyObject();
解説
割り当てられているすべてのリソースを解放し、FinalRelease を呼び出して、モジュールのロック数をデクリメントします。
CComPolyObject::CreateInstance
CoCreateInstance のオーバーヘッドを発生させずに、新しい CComPolyObject<contained
> オブジェクトを作成できます。
static HRESULT WINAPI CreateInstance(
LPUNKNOWN pUnkOuter,
CComPolyObject<contained>** pp);
パラメーター
pp
[out] CComPolyObject< contained
> ポインターへのポインター。 CreateInstance
が正常に終了しない場合、pp は NULL に設定されます。
戻り値
標準の HRESULT 値。
解説
返されるオブジェクトの参照カウントは 0 なので、すぐに 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;
パラメーター
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
[入力] 要求されるインターフェイスの識別子。
ppvObject
[出力] iid によって識別されるインターフェイス ポインターへのポインター。 オブジェクトでこのインターフェイスがサポートされていない場合、ppvObject は NULL に設定されます。
pp
[out] __uuidof(Q)
によって識別されるインターフェイスへのポインター。
戻り値
標準の HRESULT 値。
解説
集計オブジェクトの場合、要求されたインターフェイスが IUnknown
である場合は、QueryInterface
によって、集計オブジェクトの独自の IUnknown
を指すポインターが返され、参照カウントがインクリメントされます。 それ以外の場合、このメソッドでは、CComContainedObject
データ メンバー (m_contained) を介してインターフェイスを照会します。
CComPolyObject::Release
オブジェクトの参照カウントをデクリメントします。
STDMETHOD_(ULONG, Release)();
戻り値
デバッグ ビルドでは、診断またはテストに役立つ可能性のある値が、Release
から返されます。 デバッグ以外のビルドでは、Release
から常に 0 が返されます。