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
- ThreadModel
A classe cujos métodos implementam o modelo de threads desejado.Você pode escolher explicitamente o modelo de threads definindo ThreadModel a CComSingleThreadModel, a CComMultiThreadModel, ou a CComMultiThreadModelNoCS.Você pode aceitar o modelo de threads do servidor ThreadModel definindo a CComObjectThreadModel ou a CComGlobalsThreadModel.
Membros
Métodos
Construtor. |
|
Sai contagem de referência para um objeto nonaggregated. |
|
Diminui a contagem de referência para um objeto nonaggregated. |
|
Se o modelo de segmentos são multithread, obtenha a propriedade de um objeto de seção crítica. |
|
Se o modelo de segmentos são multithread, libera a propriedade de um objeto de seção crítica. |
Métodos de CComObjectRootBase
Substituição em sua classe para executar algumas inicialização exigida pelo seu objeto. |
|
Substituição em sua classe para executar qualquer limpeza exigida pelo seu objeto. |
|
Sai contagem de referência para um objeto agregado. |
|
Delegados a IUnknown externa de um objeto agregado. |
|
Diminui a contagem de referência para um objeto agregado. |
Funções estáticas
Delegados a IUnknown de um objeto nonaggregated. |
|
Chamado durante a inicialização e o término do módulo para classes derivadas listados no mapa do objeto. |
Membros de dados
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. |
|
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