Compartilhar via


Classe de CComObjectRootEx

Essa classe fornece métodos para gerenciamento de contagem de referência de objeto de forma para objetos nonaggregated e agregados.

template<
   class ThreadModel 
>
class CComObjectRootEx : public CComObjectRootBase

Parâmetros

Membros

8hzca2fs.collapse_all(pt-br,VS.110).gifMétodos

CComObjectRootEx

Construtor.

InternalAddRef

Sai contagem de referência para um objeto nonaggregated.

InternalRelease

Diminui a contagem de referência para um objeto nonaggregated.

Bloquear

Se o modelo de segmentos são multithread, obtenha a propriedade de um objeto de seção crítica.

Unlock

Se o modelo de segmentos são multithread, libera a propriedade de um objeto de seção crítica.

8hzca2fs.collapse_all(pt-br,VS.110).gifMétodos de CComObjectRootBase

FinalConstruct

Substituição em sua classe para executar algumas inicialização exigida pelo seu objeto.

FinalRelease

Substituição em sua classe para executar qualquer limpeza exigida pelo seu objeto.

OuterAddRef

Sai contagem de referência para um objeto agregado.

OuterQueryInterface

Delegados a IUnknown externa de um objeto agregado.

OuterRelease

Diminui a contagem de referência para um objeto agregado.

8hzca2fs.collapse_all(pt-br,VS.110).gifFunções estáticas

InternalQueryInterface

Delegados a IUnknown de um objeto nonaggregated.

ObjectMain

Chamado durante a inicialização e o término do módulo para classes derivadas listados no mapa do objeto.

8hzca2fs.collapse_all(pt-br,VS.110).gifMembros de dados

m_dwRef

Com m_pOuterUnknown, parte de uma união.Usado quando o objeto não é agregado para armazenar a contagem de referência de AddRef e de Versão.

m_pOuterUnknown

Com m_dwRef, parte de uma união.Usado quando o objeto está agregado armazenar um ponteiro para o desconhecido externo.

Comentários

As alças deCComObjectRootEx manipula o gerenciamento de contagem de referência para objetos nonaggregated e agregados.Ele contém a contagem de referência de objeto se o objeto não está sendo agregado, e mantém o ponteiro ao desconhecido externo se o objeto está sendo agregado.Para objetos agregados, os métodos de CComObjectRootEx podem ser usados para manipular a falha do objeto interno para a compilação, e para proteger o objeto externo de exclusão quando as interfaces são liberadas internas ou o objeto interno é excluído.

Uma classe que implementa um servidor de CComObjectRootEx COM deve herdar de ou de CComObjectRoot.

Se sua definição de classe especifica a macro de DECLARE_POLY_AGGREGATABLE , ATL cria uma instância de CComPolyObject<CYourClass> quando IClassFactory::CreateInstance é chamado.Durante a criação, o valor de desconhecido externo é verificado.Se é NULO, IUnknown é implementado para um objeto nonaggregated.Se o não externo não é NULO, IUnknown é implementado para um objeto agregado.

Se a classe não especifica a macro de DECLARE_POLY_AGGREGATABLE , ATL cria uma instância de CAggComObject<CYourClass> para objetos agregados ou uma instância de CComObject<CYourClass> para objetos nonaggregated.

A vantagem de usar CComPolyObject é que você evita ter CComAggObject e CComObject em seu módulo para manipular o caso agregados e nonaggregated.Identificadores únicos de objeto de CComPolyObject ambos os casos.Portanto, somente uma cópia de vtable e uma cópia das funções existem no seu módulo.Se seu vtable é grande, isso pode reduzir significativamente o tamanho do módulo.Em o entanto, se seu vtable é pequeno, usar CComPolyObject pode resultar em um tamanho maior um pouco de módulo porque não é otimizado para um objeto agregado ou nonaggregated, como é CComAggObject e CComObject.

Se o objeto é agregado, IUnknown é implementado por CComAggObject ou por CComPolyObject.Essas classes representante QueryInterface, AddRef, e chamadas de Versão a OuterQueryInterface, a OuterAddRef, e a OuterRelease de CComObjectRootEx para encaminhar ao desconhecido externo.Normalmente, você substitui CComObjectRootEx::FinalConstruct em sua classe para criar todos os objetos agregados, e substitui CComObjectRootEx::FinalRelease para liberar quaisquer objetos agregados.

Se o objeto não é agregado, IUnknown é implementado por CComObject ou por CComPolyObject.Em esse caso, chamadas a QueryInterface, AddRef, e Versão são delegados a InternalQueryInterface, a InternalAddRef, e a InternalRelease de CComObjectRootEx para executar operações reais.

Requisitos

Cabeçalho: atlcom.h

Consulte também

Referência

Classe de CComAggObject

Classe de CComObject

Classe de CComPolyObject

Outros recursos

Visão geral da classe de ATL