Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.
Esta classe implementa uma interface de desligamento.
Sintaxe
template<class Base>
class CComTearOffObject : public Base
Parâmetros
Base
A sua classe de remoção derivada e CComTearOffObjectBase as interfaces que quer que o seu objeto de remoção suporte.
O ATL implementa as suas interfaces de separação em duas fases — os CComTearOffObjectBase métodos tratam a contagem de referências e QueryInterface, enquanto CComTearOffObject implementa IUnknown.
Membros
Construtores Públicos
| Nome | Description |
|---|---|
| CComTearOffObject::CComTearTearOffObject | O construtor. |
| CComTearOffObject::~CComTearOffObject | O destruidor. |
Métodos Públicos
| Nome | Description |
|---|---|
| CComTearOffObject::AddRef | Incrementa a contagem de referência para um CComTearOffObject objeto. |
| CComTearOffObject::QueryInterface | Devolve um ponteiro para a interface solicitada, seja na sua classe de remoção ou na classe proprietária. |
| CComTearOffObject::Release | Diminui a contagem de referência de um CComTearOffObject objeto e destrói-o. |
Métodos CComTearOffObjectBase
| Função | Description |
|---|---|
| CComTearOffObjectBase | Construtor. |
Membros de dados CComTearOffObjectBase
| Membro de dados | Description |
|---|---|
| m_pOwner | Um indicador para um CComObject derivado da classe proprietário. |
Observações
CComTearOffObject implementa uma interface de remoção como um objeto separado que só é instanciado quando essa interface é consultada. A desmontagem é eliminada quando a sua contagem de referências se torna zero. Normalmente, constróis uma interface de remoção para uma interface que raramente é usada, já que usar uma remoção guarda um ponteiro vtable em todas as instâncias do teu objeto principal.
Deves derivar a classe que implementa o tear-off a partir CComTearOffObjectBase e a partir das interfaces que queres que o teu objeto de remoção suporte.
CComTearOffObjectBase está templatizado na classe proprietário e no modelo de rosca. A classe proprietário é a classe do objeto para a qual está a ser implementada uma remoção. Se não especificar um modelo de thread, é usado o modelo de thread padrão.
Deves criar um mapa COM para a tua turma de desmontagem. Quando o ATL instancia o tear-off, irá criar CComTearOffObject<CYourTearOffClass> ou CComCachedTearOffObject<CYourTearOffClass>.
Por exemplo, na amostra BEEPER, a CBeeper2 classe é a classe de remoção e a CBeeper classe é a classe proprietária:
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
Requerimentos
Cabeçalho: atlcom.h
CComTearOffObject::AddRef
Incrementa a contagem de referência do CComTearOffObject objeto em um.
STDMETHOD_(ULONG, AddRef)();
Valor de retorno
Um valor que pode ser útil para diagnóstico e testes.
CComTearOffObject::CComTearTearOffObject
O construtor.
CComTearOffObject(void* pv);
Parâmetros
PV
[dentro] Ponteiro que será convertido num ponteiro para um CComObject<Owner> objeto.
Observações
Incrementa a contagem de referências do proprietário em um.
CComTearOffObject::~CComTearOffObject
O destruidor.
~CComTearOffObject();
Observações
Liberta todos os recursos alocados, chama o FinalRelease e diminui a contagem de bloqueios de módulos.
CComTearOffObject::CComTearOffObjectBase
O construtor.
CComTearOffObjectBase();
Observações
Inicializa o membro m_pOwner em NULL.
CComTearOffObject::m_pOwner
Um apontador para um objeto CComObject derivado de Owner.
CComObject<Owner>* m_pOwner;
Parâmetros
Proprietário
[dentro] A classe para a qual está a ser implementada uma desmontagem.
Observações
O ponteiro é inicializado para NULL durante a construção.
CComTearOffObject::QueryInterface
Recupera um ponteiro para a interface solicitada.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
Parâmetros
IID
[dentro] O IID da interface a ser solicitado.
ppvObject
[fora] Um ponteiro para o ponteiro da interface identificado por iid, ou NULL se a interface não for encontrada.
Valor de retorno
Um valor HRESULT padrão.
Observações
Consultas primeiro para interfaces na tua turma de desmontagem. Se a interface não estiver lá, consulta a interface no objeto proprietário. Se a interface solicitada for IUnknown, devolve o IUnknown do proprietário.
CComTearOffObject::Release
Diminui a contagem de referência em um e, se a contagem for zero, elimina o CComTearOffObject.
STDMETHOD_ULONG Release();
Valor de retorno
Em builds sem depuração, devolve sempre zero. Em compilações de depuração, devolve um valor que pode ser útil para diagnóstico ou testes.
Consulte também
Classe CComCachedTearOffObject
Visão geral da classe