CComObjectRootEx クラス
このクラスには、非集約オブジェクトと集約オブジェクトの両方について、オブジェクトの参照カウントを管理するメソッドが用意されています。
template<
class ThreadModel
>
class CComObjectRootEx : public CComObjectRootBase
パラメーター
- ThreadModel
メソッドを使用して、目的のスレッド モデルを実装するクラス。 CComSingleThreadModel、CComMultiThreadModel、または CComMultiThreadModelNoCSへ ThreadModel を設定することによって明示的にスレッド モデルを選択できます。 CComObjectThreadModel か CComGlobalsThreadModelへ ThreadModel を設定して、サーバーの既定のスレッド モデルを使用できます。
メンバー
メソッド
コンストラクターです。 |
|
集約オブジェクトの参照カウントをインクリメントします。 |
|
集約オブジェクトの参照カウントをデクリメントします。 |
|
スレッド モデルはマルチスレッドの場合、クリティカル セクション オブジェクトの所有権を取得します。 |
|
スレッド モデルはマルチスレッドの場合、クリティカル セクション オブジェクトの所有権を解放します。 |
CComObjectRootBase のメソッド
独自のオブジェクトに必要な初期化を実行するクラスでをオーバーライドします。 |
|
独自のオブジェクトに必要なクリーンアップを実行するクラスでをオーバーライドします。 |
|
集約オブジェクトの参照カウントをインクリメントします。 |
|
集約オブジェクトの外側で IUnknown へのデリゲート。 |
|
集約オブジェクトの参照カウントをデクリメントします。 |
静的関数
集約オブジェクトの IUnknown へのデリゲート。 |
|
派生クラスのモジュールの初期化と終了時に呼び出されます。オブジェクト マップに示します。 |
データ メンバー
m_pOuterUnknownでは、共用体の部分。 AddRef と [リリース]の参照カウントを保持するオブジェクトが集約されない場合に使用されます。 |
|
m_dwRefでは、共用体の部分。 外側の演算子へのポインターを保持するオブジェクトが集約されたときに使用します。 |
解説
非集約オブジェクトのCComObjectRootEx ハンドルのオブジェクトの参照カウントを管理します。 これは、のオブジェクトを集約する場合は、オブジェクトを集約する保持し、外側の不明にポインターを保持するオブジェクトの参照カウントを示します。 集約オブジェクトに対して構成要素へのオブジェクトの内部エラーの処理に、CComObjectRootEx のメソッドが使用でき、内側のインターフェイスが解放される内部オブジェクトまたは保護するために削除された場合、削除の外部オブジェクトが。
COM サーバーを実装するクラスは CComObjectRootEx か CComObjectRootから継承する必要があります。
は、をクラス定義が DECLARE_POLY_AGGREGATABLE のマクロを指定すると、ATL は IClassFactory::CreateInstance が呼び出されたときに CComPolyObjectCYourClass のインスタンスを作成します。 作成時に、外側の不明の値がチェックされます。 これは null場合、IUnknown は集約オブジェクトに実装されます。 外側の nullが不明である、IUnknown は集約オブジェクトに実装されます。
は、クラスが DECLARE_POLY_AGGREGATABLE のマクロを指定する、ATL は集約オブジェクトの CAggComObjectCYourClass のインスタンスや非集約オブジェクトの CComObjectCYourClass のインスタンスを作成します。
CComPolyObject を使用する利点は集約されます。集約ケースを処理するモジュールで CComAggObject と CComObject の両方があることを避けるためです。 CComPolyObject の単一のオブジェクトは両方を処理します。 したがって、vtable の 1 種類のコピーと関数の 1 のコピーは、モジュールにあります。 、vtable の場合、これは大幅に、モジュールのサイズを抑えることができます。 ただし、ようになります CComAggObject と CComObjectがやや多くのモジュールのサイズで vtable が小さく、集約または非集約オブジェクト用に最適化されていないため CComPolyObject を使用して行われます。
独自のオブジェクトを集約すると、IUnknown は CComAggObject か CComPolyObjectによって実装されます。 これらのクラスは CComObjectRootEx の OuterQueryInterface、OuterAddRefと OuterRelease に不明の外部に転送します QueryInterface、AddRefと [リリース] の呼び出しに委任します。 通常、集約オブジェクトを作成するようにクラスのをオーバーライド CComObjectRootEx::FinalConstruct 集約オブジェクトを解放するために CComObjectRootEx::FinalRelease をオーバーライドします。
、オブジェクトを集約する必要 IUnknown は、CComObject か CComPolyObjectによって実装されます。 この場合、QueryInterfaceの呼び出し、AddRefと [リリース] は CComObjectRootEx の InternalQueryInterface、InternalAddRefと InternalRelease に実際の操作を実行するために転送されます。
必要条件
ヘッダー : atlcom.h