CComTearOffObject クラス
このクラスは、ティアオフ インターフェイスを実装します。
template<
class Base
>
class CComTearOffObject :
public Base
パラメーター
- Base
CComTearOffObjectBase から派生したクラスのティアオフ インターフェイス、およびサポートへのティアオフのオブジェクトを関連付けます。
ATL は 2 段階のティアオフ インターフェイスを実装します。CComTearOffObjectBase のメソッドは CComTearOffObject は IUnknownを実行しますが、参照カウントと QueryInterfaceを処理します。
メンバー
パブリック コンストラクター
名前 |
説明 |
---|---|
コンストラクターです。 |
|
デストラクターです。 |
パブリック メソッド
名前 |
説明 |
---|---|
CComTearOffObject のオブジェクトの参照カウントをインクリメントします。 |
|
アプリケーションのティアオフの所有者クラスの要求されたインターフェイスへのポインターを返します。 |
|
CComTearOffObject のオブジェクトの参照カウントをデクリメントし、破棄します。 |
CComTearOffObjectBase のメソッド
コンストラクターです。 |
CComTearOffObjectBase のデータ メンバー
CComObject へのポインターは所有者クラスから派生します。 |
解説
CComTearOffObject は、そのインターフェイスが問い合わせを受ける場合にのみのため、ティアオフ インターフェイスをインスタンス化する別のオブジェクト実装します。 ティアオフは、参照カウントがゼロになると削除されます。 通常、ティアオフを使用することはメイン オブジェクトのすべてのインスタンスの vtable ポインターを保存するため、あまり使用されないインターフェイスのティアオフ インターフェイスをビルドします。
CComTearOffObjectBase からティアオフを実装するクラスを取得するには、からすべてのインターフェイス サポートへのティアオフのオブジェクトを取得する。 CComTearOffObjectBase は所有者クラスとスレッド モデルでテンプレート化されます。 所有者クラスは、ティアオフが実行されているオブジェクトのクラスです。 スレッド モデルを指定しない場合、既定のスレッド モデルが使用されます。
アプリケーションのティアオフのクラスには、COM インターフェイス マップを作成する必要があります。 ATL は、ティアオフをインスタンス化する場合、または CComTearOffObjectCYourTearOffClassCComCachedTearOffObjectCYourTearOffClassを作成します。
たとえば、BEEPER サンプルは、CBeeper2 のクラスは、ティアオフのクラスであり、CBeeper のクラスは、所有者クラスです:
class CBeeper2 :
public ISupportErrorInfo,
public CComTearOffObjectBase<CBeeper>
{
public:
CBeeper2() {}
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid)
{
return (InlineIsEqualGUID(IID_IBeeper, riid)) ? S_OK : S_FALSE;
}
BEGIN_COM_MAP(CBeeper2)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
};
class ATL_NO_VTABLE CBeeper :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CBeeper, &CLSID_Beeper>,
public IDispatchImpl<IBeeper, &IID_IBeeper, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CBeeper()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_BEEPER)
DECLARE_NOT_AGGREGATABLE(CBeeper)
BEGIN_COM_MAP(CBeeper)
COM_INTERFACE_ENTRY(IBeeper)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY_TEAR_OFF(IID_ISupportErrorInfo, CBeeper2)
END_COM_MAP()
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
};
継承階層
Base
CComTearOffObject
必要条件
ヘッダー : atlcom.h