templatelt, classe Base >
classe CComTearOffObject : público Base
Parâmetros
Base
Sua classe destacáveis, derivado CComTearOffObjectBase e as interfaces que você deseja que seu objeto destacáveis para apoiar.
ATL implementa suas interfaces destacável em duas fases — os métodos de CComTearOffObjectBase manipular o contagem de referência e o Falha de QueryInterface, enquanto CComTearOffObject implementa IUnknown.
CComTearOffObject implementa uma interface destacáveis como um objeto separado é instanciado somente quando essa interface é consultada para. O destacável é excluído quando seu contagem de referência torna-se zero. Normalmente, você cria uma interface destacáveis para uma interface que é usada raramente, desde que usar um tear-off salva um ponteiro vtable em todas as instâncias do seu objeto principal.
Você deve derivar a classe implementando o destacável de CComTearOffObjectBase e de qualquer que seja o interfaces você quer seu objeto destacável para suporte. CComTearOffObjectBase é templatized na classe proprietário e o modelo de thread. O proprietário classe é a classe do objeto para o qual um destacável está sendo implementado. Se você não especificar um modelo de segmento, o modelo de thread de padrão é usado.
Você deve criar um mapa COM para sua classe destacáveis. Quando ATL instancia o destacáveis, que irá criar CComTearOffObjectlt;CYourTearOffClass > ou CComCachedTearOffObject <CYourTearOffClass>.
Por exemplo, no exemplo BEEPER, o CBeeper2
classe é a classe destacáveis e o CBeeper
classe é a classe de proprietário:
classe CBeeper2: ISupportErrorInfo público,
nbsp; público CComTearOffObjectBase <CBeeper>
{
público:
{CBeeper2()}
STDMETHOD(InterfaceSupportsErrorInfo) (REFIID riid)
{
retorno (InlineIsEqualGUID(IID_IBeeper,riid))?
S_OK: S_FALSE;
}
BEGIN_COM_MAP(CBeeper2)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
};
Classe CBeeper:
IDispatchImpl pública < IBeeper, & IID_IBeeper & LIBID_BeeperLib >
CComObjectRoot público,
CComCoClass públicas < CBeeper & CLSID_Beeper >
{
público:
CBeeper();
BEGIN_COM_MAP(CBeeper)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IBeeper)
COM_INTERFACE_ENTRY_TEAR_OFF (IID_ISupportErrorInfo, CBeeper2)
END_COM_MAP()
...
}
# include lt;atlcom.h>
Co&nsulte tambémnbsp;CComCachedTearOffObject