CComTearOffObject选件类

此选件类实现一拖曳接口。

template<
   class Base 
>
class CComTearOffObject :
   public Base

参数

  • Base
    您的拖曳选件类,从派生 CComTearOffObjectBase,您希望接口拖曳对象支持。

CComTearOffObject 实现 IUnknown,ATL在两个阶段中实现其拖曳接口( CComTearOffObjectBase 方法处理引用计数和 QueryInterface

成员

wh8b86c9.collapse_all(zh-cn,VS.110).gif公共构造函数

名称

说明

CComTearOffObject::CComTearOffObject

构造函数。

CComTearOffObject::~CComTearOffObject

该析构函数。

wh8b86c9.collapse_all(zh-cn,VS.110).gif公共方法

名称

说明

CComTearOffObject::AddRef

增加 CComTearOffObject 对象的引用计数。

CComTearOffObject::QueryInterface

返回指向在拖曳选件类或所有者选件类的请求的接口。

CComTearOffObject::Release

递减 CComTearOffObject 对象的引用计数并销毁它。

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

CComTearOffObjectBase

构造函数。

wh8b86c9.collapse_all(zh-cn,VS.110).gifCComTearOffObjectBase数据成员

m_pOwner

CComObject 的指针从所有者选件类派生的。

备注

CComTearOffObject 实现一拖曳接口作为实例化的一个单独的对象,仅当该接口。查询时。其引用计数成为零时,拖曳被删除。通常,生成很少使用接口的一拖曳接口,因为使用拖曳保存到您的主要目的所有实例的vtable指针。

应从 CComTearOffObjectBase 派生来实现拖曳的选件类,并从接口希望请拖曳对象支持。CComTearOffObjectBase 在所有者选件类和线程模型templatized。所有者选件类是拖曳实现对象的选件类。如果不指定线程模型,则使用默认线程模型。

您应创建自己的COM映射拖曳选件类。当ATL实例化拖曳,它将创建 CComTearOffObject<CYourTearOffClass>CComCachedTearOffObject<CYourTearOffClass>

例如,在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

要求

Header: atlcom.h

请参见

参考

CComCachedTearOffObject选件类

其他资源

ATL选件类概述