次の方法で共有


CComObjectRootEx クラス

このクラスには、非集約オブジェクトと集約オブジェクトの両方について、オブジェクトの参照カウントを管理するメソッドが用意されています。

template< 
   class ThreadModel  
> 
class CComObjectRootEx : public CComObjectRootBase

パラメーター

メンバー

メソッド

CComObjectRootEx

コンストラクターです。

InternalAddRef

集約オブジェクトの参照カウントをインクリメントします。

InternalRelease

集約オブジェクトの参照カウントをデクリメントします。

ロック

スレッド モデルはマルチスレッドの場合、クリティカル セクション オブジェクトの所有権を取得します。

[ロック解除]

スレッド モデルはマルチスレッドの場合、クリティカル セクション オブジェクトの所有権を解放します。

CComObjectRootBase のメソッド

FinalConstruct

独自のオブジェクトに必要な初期化を実行するクラスでをオーバーライドします。

FinalRelease

独自のオブジェクトに必要なクリーンアップを実行するクラスでをオーバーライドします。

OuterAddRef

集約オブジェクトの参照カウントをインクリメントします。

OuterQueryInterface

集約オブジェクトの外側で IUnknown へのデリゲート。

OuterRelease

集約オブジェクトの参照カウントをデクリメントします。

静的関数

InternalQueryInterface

集約オブジェクトの IUnknown へのデリゲート。

ObjectMain

派生クラスのモジュールの初期化と終了時に呼び出されます。オブジェクト マップに示します。

データ メンバー

m_dwRef

m_pOuterUnknownでは、共用体の部分。 AddRef[リリース]の参照カウントを保持するオブジェクトが集約されない場合に使用されます。

m_pOuterUnknown

m_dwRefでは、共用体の部分。 外側の演算子へのポインターを保持するオブジェクトが集約されたときに使用します。

解説

非集約オブジェクトのCComObjectRootEx ハンドルのオブジェクトの参照カウントを管理します。 これは、のオブジェクトを集約する場合は、オブジェクトを集約する保持し、外側の不明にポインターを保持するオブジェクトの参照カウントを示します。 集約オブジェクトに対して構成要素へのオブジェクトの内部エラーの処理に、CComObjectRootEx のメソッドが使用でき、内側のインターフェイスが解放される内部オブジェクトまたは保護するために削除された場合、削除の外部オブジェクトが。

COM サーバーを実装するクラスは CComObjectRootExCComObjectRootから継承する必要があります。

は、をクラス定義が DECLARE_POLY_AGGREGATABLE のマクロを指定すると、ATL は IClassFactory::CreateInstance が呼び出されたときに CComPolyObjectCYourClass のインスタンスを作成します。 作成時に、外側の不明の値がチェックされます。 これは null場合、IUnknown は集約オブジェクトに実装されます。 外側の nullが不明である、IUnknown は集約オブジェクトに実装されます。

は、クラスが DECLARE_POLY_AGGREGATABLE のマクロを指定する、ATL は集約オブジェクトの CAggComObjectCYourClass のインスタンスや非集約オブジェクトの CComObjectCYourClass のインスタンスを作成します。

CComPolyObject を使用する利点は集約されます。集約ケースを処理するモジュールで CComAggObjectCComObject の両方があることを避けるためです。 CComPolyObject の単一のオブジェクトは両方を処理します。 したがって、vtable の 1 種類のコピーと関数の 1 のコピーは、モジュールにあります。 、vtable の場合、これは大幅に、モジュールのサイズを抑えることができます。 ただし、ようになります CComAggObjectCComObjectがやや多くのモジュールのサイズで vtable が小さく、集約または非集約オブジェクト用に最適化されていないため CComPolyObject を使用して行われます。

独自のオブジェクトを集約すると、IUnknownCComAggObjectCComPolyObjectによって実装されます。 これらのクラスは CComObjectRootExOuterQueryInterfaceOuterAddRefOuterRelease に不明の外部に転送します QueryInterfaceAddRef[リリース] の呼び出しに委任します。 通常、集約オブジェクトを作成するようにクラスのをオーバーライド CComObjectRootEx::FinalConstruct 集約オブジェクトを解放するために CComObjectRootEx::FinalRelease をオーバーライドします。

、オブジェクトを集約する必要 IUnknown は、CComObjectCComPolyObjectによって実装されます。 この場合、QueryInterfaceの呼び出し、AddRef[リリース]CComObjectRootExInternalQueryInterfaceInternalAddRefInternalRelease に実際の操作を実行するために転送されます。

必要条件

ヘッダー : atlcom.h

参照

関連項目

CComAggObject クラス

CComObject クラス

CComPolyObject クラス

その他の技術情報

ATL クラスの概要