次の方法で共有


CComTearOffObject クラス

このクラスは、ティアオフ インターフェイスを実装します。

template< 
   class Base  
> 
class CComTearOffObject : 
   public Base

パラメーター

  • Base
    CComTearOffObjectBase から派生したクラスのティアオフ インターフェイス、およびサポートへのティアオフのオブジェクトを関連付けます。

ATL は 2 段階のティアオフ インターフェイスを実装します。CComTearOffObjectBase のメソッドは CComTearOffObjectIUnknownを実行しますが、参照カウントと QueryInterfaceを処理します。

メンバー

パブリック コンストラクター

名前

説明

CComTearOffObject::CComTearOffObject

コンストラクターです。

CComTearOffObject::~CComTearOffObject

デストラクターです。

パブリック メソッド

名前

説明

CComTearOffObject::AddRef

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

CComTearOffObject::QueryInterface

アプリケーションのティアオフの所有者クラスの要求されたインターフェイスへのポインターを返します。

CComTearOffObject::Release

CComTearOffObject のオブジェクトの参照カウントをデクリメントし、破棄します。

CComTearOffObjectBase のメソッド

CComTearOffObjectBase

コンストラクターです。

CComTearOffObjectBase のデータ メンバー

m_pOwner

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

参照

関連項目

CComCachedTearOffObject クラス

その他の技術情報

ATL クラスの概要