Classe CComTearOffObject
Essa classe implementa uma interface destacável.
Sintaxe
template<class Base>
class CComTearOffObject : public Base
Parâmetros
Base
Sua classe destacável, derivada de CComTearOffObjectBase
e as interfaces às quais você deseja que o seu objeto destacável dê suporte.
A ATL implementa suas interfaces destacáveis em duas fases: os métodos CComTearOffObjectBase
lidam com a contagem de referência e QueryInterface
, enquanto CComTearOffObject
implementa IUnknown.
Membros
Construtores públicos
Nome | Descrição |
---|---|
CComTearOffObject::CComTearOffObject | O construtor . |
CComTearOffObject::~CComTearOffObject | O destruidor. |
Métodos públicos
Nome | Descrição |
---|---|
CComTearOffObject::AddRef | Incrementa a contagem de referência de um objeto CComTearOffObject . |
CComTearOffObject::QueryInterface | Retorna um ponteiro para a interface solicitada na classe destacável ou na classe de proprietário. |
CComTearOffObject::Release | Decrementa a contagem de referência de um objeto CComTearOffObject e o destrói. |
Métodos CComTearOffObjectBase
Função | Descrição |
---|---|
CComTearOffObjectBase | Construtor. |
Membros de dados CComTearOffObjectBase
Membro de dados | Descrição |
---|---|
m_pOwner | Um ponteiro para um CComObject derivado da classe de proprietário. |
Comentários
CComTearOffObject
implementa uma interface destacável como um objeto separado que é instanciado somente quando essa interface é consultada. O elemento destacável é excluído quando sua contagem de referência se torna zero. Normalmente, você cria uma interface destacável para uma interface que raramente é usada, já que o uso de um elemento destacável salva um ponteiro vtable em todas as instâncias do objeto principal.
Você deve derivar a classe que implementa o elemento destacável de CComTearOffObjectBase
e de qualquer interface à qual você deseja que seu objeto destacável dê suporte. CComTearOffObjectBase
é templatizado na classe de proprietário e no modelo de thread. A classe de proprietário é a classe do objeto para o qual um elemento destacável está sendo implementado. Se você não especificar um modelo de thread, o modelo de thread padrão será usado.
Você deve criar um mapa COM para sua classe destacável. Quando a ATL instanciar o elemento destacável, ela criará CComTearOffObject<CYourTearOffClass>
ou CComCachedTearOffObject<CYourTearOffClass>
.
Por exemplo, no exemplo de BEEPER, a classe CBeeper2
é a destacável e a classe CBeeper
é a 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:
};
Hierarquia de herança
Base
CComTearOffObject
Requisitos
Cabeçalho: atlcom.h
CComTearOffObject::AddRef
Incrementa a contagem de referência do objeto CComTearOffObject
em um.
STDMETHOD_(ULONG, AddRef)();
Valor de Devolução
Um valor que pode ser útil para diagnóstico e teste.
CComTearOffObject::CComTearOffObject
O construtor .
CComTearOffObject(void* pv);
Parâmetros
pv
[in] Ponteiro que será convertido em um ponteiro para um objeto CComObject<Owner>
.
Comentários
Incrementa a contagem de referência do proprietário em um.
CComTearOffObject::~CComTearOffObject
O destruidor.
~CComTearOffObject();
Comentários
Libera todos os recursos alocados, chama FinalRelease e decrementa a contagem de bloqueio do módulo.
CComTearOffObject::CComTearOffObjectBase
O construtor .
CComTearOffObjectBase();
Comentários
Inicializa o membro m_pOwner em NULL.
CComTearOffObject::m_pOwner
Um ponteiro para um objeto CComObject derivado de Owner.
CComObject<Owner>* m_pOwner;
Parâmetros
Proprietário
[in] A classe para a qual um elemento destacável está sendo implementado.
Comentários
O ponteiro é inicializado em NULL durante a construção.
CComTearOffObject::QueryInterface
Recupera um ponteiro para a interface solicitada.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
Parâmetros
iid
[in] O IID da interface que está sendo solicitado.
ppvObject
[out] Um ponteiro para o ponteiro de interface identificado por iid ou NULL se a interface não for encontrada.
Valor de Devolução
Um valor HRESULT padrão.
Comentários
Consulta primeiro as interfaces na sua classe destacável. Se a interface não estiver lá, consulta a interface no objeto do proprietário. Se a interface solicitada for IUnknown
, retornará o IUnknown
do proprietário.
CComTearOffObject::Release
Decrementa a contagem de referência em um e, se ela for zero, exclui o CComTearOffObject
.
STDMETHOD_ULONG Release();
Valor de Devolução
Em builds que não são de depuração, sempre retorna 0. Em builds de depuração, retorna um valor que pode ser útil para diagnóstico ou teste.
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de