CComTearOffObject选件类
此选件类实现一拖曳接口。
template<
class Base
>
class CComTearOffObject :
public Base
参数
- Base
您的拖曳选件类,从派生 CComTearOffObjectBase,您希望接口拖曳对象支持。
而 CComTearOffObject 实现 IUnknown,ATL在两个阶段中实现其拖曳接口( CComTearOffObjectBase 方法处理引用计数和 QueryInterface。
成员
公共构造函数
名称 |
说明 |
---|---|
构造函数。 |
|
该析构函数。 |
公共方法
名称 |
说明 |
---|---|
增加 CComTearOffObject 对象的引用计数。 |
|
返回指向在拖曳选件类或所有者选件类的请求的接口。 |
|
递减 CComTearOffObject 对象的引用计数并销毁它。 |
CComTearOffObjectBase方法
构造函数。 |
CComTearOffObjectBase数据成员
为 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