CComTearOffObject 類別
這個類別會實作 Tear-Off 介面。
template<
class Base
>
class CComTearOffObject :
public Base
參數
- Base
請 Tear-Off 類別,衍生自 CComTearOffObjectBase ,而您希望 Tear-Off 為支援介面的物件。
ATL 是以兩個階段實作它自己 Tear-Off 介面— CComTearOffObjectBase 方法處理參考計數和 QueryInterface,反之, CComTearOffObject 實作 IUnknown。
Members
公用建構函式
名稱 |
描述 |
---|---|
建構函式。 |
|
解構函式。 |
公用方法
名稱 |
描述 |
---|---|
將 CComTearOffObject 物件的參考計數。 |
|
傳回指向儲存在您 Tear-Off 類別或擁有者類別的要求的介面。 |
|
會 CComTearOffObject 物件的參考次數並終止。 |
CComTearOffObjectBase 方法
建構函式。 |
CComTearOffObjectBase 資料成員
為 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