templatelt; クラスThreadModel(&L) gt;
CComObjectRootEx クラス: パブリック CComObjectRootBase(&G)
パラメーター
ThreadModel
メソッドが必要なスレッド モデルを実装するクラス。ThreadModel CComSingleThreadModel、 CComMultiThreadModel、またはCComMultiThreadModelNoCSに設定することにより、スレッド モデルを明示的に選択することができます。ThreadModel CComObjectThreadModelまたはCComGlobalsThreadModelに設定することによって、サーバーの既定のスレッド モデルを受け入れることができます。
CComObjectRootExオブジェクト参照カウント管理非集約と集計の両方のオブジェクトを処理します。オブジェクトの集計されていないとオブジェクトが集約されている場合、外側の未知にポインターを保持、オブジェクトの参照カウントを保持します。集約オブジェクトの場合、 CComObjectRootExメソッドを作成し、内部インターフェイスのリリース、または内部のオブジェクトを削除すると削除から、外側のオブジェクトを保護するために、内部オブジェクトの障害を処理できます。
CComObjectRootExまたはCComObjectRootから COM サーバーを実装するクラスを継承する必要があります。
DECLARE_POLY_AGGREGATABLEマクロをクラス定義を指定すると、ATL CComPolyObjectlt のインスタンスを作成します。CYourClass > iclassfactory::createinstanceときと呼ばれます。作成時に、外側の未知の値がチェックされます。NULLの場合は、非集約オブジェクトのIUnknownが実装されます。外部不明がNULLでない場合は、集約オブジェクトのIUnknownを実装します。
クラスは、 DECLARE_POLY_AGGREGATABLEマクロを指定しない場合は、ATL CComObjectlt のインスタンスを作成します。CYourClass >集約オブジェクトまたは非集約オブジェクトCComAggObject <CYourClass>のインスタンスを。
CComPolyObjectを使用する利点は、 CComAggObject ccomobject からモジュールに集約、非集約のケースを処理することを避けるためです。CComPolyObjectオブジェクトを 1 つは、両方のケースを処理します。したがって、1 つは vtable のコピーと関数の 1 つのコピーをモジュールに存在します。あなたの vtable が大きい場合は、この大幅にあなたのモジュールのサイズを減らすことができます。あなたの vtable が小さい場合は、集計または非集約オブジェクトの最適化されていないためCComAggObject ccomobject からただし、 CComPolyObjectを使用して、わずかに大きいモジュール サイズがあります。
フル コントロールまたは Internet Explorer のコントロールを作成するとき、 DECLARE_POLY_AGGREGATABLEマクロ自動的に、クラス定義に、ATL オブジェクト ウィザードによって追加されます。
オブジェクトを集約する場合は、 IUnknownの実装CComAggObjectまたはCComPolyObjectによって。これらのクラスは、 QueryInterface、 AddRef、およびReleaseの呼び出し、 CComObjectRootExのOuterQueryInterface、 OuterAddRef、およびOuterRelease未知の外側に転送するに委任します。通常、 CComObjectRootEx::FinalConstruct集計オブジェクトを作成するには、クラス内でオーバーライドし、集約オブジェクトを解放するには、 CComObjectRootEx::FinalReleaseををオーバーライド。
オブジェクトが集約されていない場合は、 IUnknown ccomobject からまたはCComPolyObjectによって実装されます。QueryInterface、 AddRef、およびReleaseの呼び出しがCComObjectRootExのInternalQueryInterface、 InternalAddRef、およびInternalReleaseが委任された実際の操作を実行するには、。
#include lt;atlcom.h>
参照特価;CComAggObject、 ccomobject から、 CComPolyObject(&N)