Classe CComTearOffObject
Essa classe implementa uma interface destacável.
template<
class Base
>
class CComTearOffObject :
public Base
Parâmetros
- Base
A classe destacável, derivada de CComTearOffObjectBase e as interfaces que você deseja que o seu objeto destacáveis para oferecer suporte a.
ATL implementa interfaces destacável em duas fases — o CComTearOffObjectBase métodos de lidar com a contagem de referência e QueryInterface, enquanto CComTearOffObject implementa IUnknown.
Comentários
CComTearOffObject implementa uma interface destacável sistema autônomo um objeto separado é instanciado somente quando essa interface é consultada quanto a. O destacável será excluída quando sua contagem de referência é reduzido a zero.Normalmente, criar uma interface destacáveis para uma interface é raramente usada, pois usar um destacável salva um ponteiro vtable em todas as instâncias do seu objeto principal.
Você deve derivar a classe de implementação destacáveis de CComTearOffObjectBase e de interfaces que você deseja seu objeto destacáveis para oferecer suporte. CComTearOffObjectBase é templatized sobre o classe de proprietário e o modelo de segmento. Proprietário classe é a classe do objeto para o qual um destacável está sendo implementado.Se você não especificar um modelo de thread, o modelo de segmento padrão será usado.
Você deve criar um MAP de COM para sua classe destacável.Quando ATL instancia o destacáveis, ele criará CComTearOffObject <cyourtearoffclass> or CComCachedTearOffObject <cyourtearoffclass>.
Por exemplo, no exemplo de PAGER, a CBeeper2 é a classe destacável e o CBeeper classe é o classe de proprietário:
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:
};
Requisitos
Cabeçalho: atlcom.h
Consulte também
Referência
Classe CComCachedTearOffObject