共用方式為


CComTearOffObject 類別

這個類別會實作 Tear-Off 介面。

template<
   class Base 
>
class CComTearOffObject :
   public Base

參數

  • Base
    請 Tear-Off 類別,衍生自 CComTearOffObjectBase ,而您希望 Tear-Off 為支援介面的物件。

ATL 是以兩個階段實作它自己 Tear-Off 介面— CComTearOffObjectBase 方法處理參考計數和 QueryInterface,反之, CComTearOffObject 實作 IUnknown

Members

wh8b86c9.collapse_all(zh-tw,VS.110).gif公用建構函式

名稱

描述

CComTearOffObject::CComTearOffObject

建構函式。

CComTearOffObject::~CComTearOffObject

解構函式。

wh8b86c9.collapse_all(zh-tw,VS.110).gif公用方法

名稱

描述

CComTearOffObject::AddRef

CComTearOffObject 物件的參考計數。

CComTearOffObject::QueryInterface

傳回指向儲存在您 Tear-Off 類別或擁有者類別的要求的介面。

CComTearOffObject::Release

CComTearOffObject 物件的參考次數並終止。

wh8b86c9.collapse_all(zh-tw,VS.110).gifCComTearOffObjectBase 方法

CComTearOffObjectBase

建構函式。

wh8b86c9.collapse_all(zh-tw,VS.110).gifCComTearOffObjectBase 資料成員

m_pOwner

CComObject 的指標從主控類別衍生自。

備註

CComTearOffObject Tear-Off 實作介面,因為具現化的物件,但該介面進行查詢。 其參考計數為零時, Tear-Off 刪除。 通常,您會建立很少使用介面的介面, Tear-Off,因為使用 Tear-Off 儲存在您的主要物件的所有執行個體的 vtable 指標。

您應該從 CComTearOffObjectBase Tear-Off 實作衍生自的類別中,並從介面想要請 Tear-Off 為支援的物件。 在CComTearOffObjectBase 擁有者類別和執行緒模型樣板化。 擁有者類別為 Tear-Off 實作物件的類別。 如果您沒有指定執行緒模型,使用預設執行緒模型。

您必須建置 COM 對應 Tear-Off 類別。 在 ATL Tear-Off 具現化,它會建立 CComTearOffObject<CYourTearOffClass>CComCachedTearOffObject<CYourTearOffClass>

例如,在 BEEPER 範例, CBeeper2 類別為 Tear-Off 類別,並 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

需求

Header: atlcom.h

請參閱

參考

CComCachedTearOffObject 類別

其他資源

ATL 類別概觀