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-se IUnknown para um objeto agregado ou não agregado.
Sintaxe
template<class contained>
class CComPolyObject : public IUnknown,
public CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>
Parâmetros
contido
A sua classe, derivada de CComObjectRoot ou CComObjectRootEx, bem como de quaisquer outras interfaces que queira suportar no objeto.
Membros
Construtores Públicos
| Nome | Description |
|---|---|
| CComPolyObject::CComPolyObject | O construtor. |
| CComPolyObject::~CComPolyObject | O destruidor. |
Métodos Públicos
| Nome | Description |
|---|---|
| CComPolyObject::AddRef | Incrementa a contagem de referências do objeto. |
| CComPolyObject::CreateInstance | (Estática) Permite criar um novo objeto CComPolyObject<contained> sem a sobrecarga do CoCreateInstance. |
| CComPolyObject::FinalConstruct | Realiza a inicialização final de m_contained. |
| CComPolyObject::FinalRelease | Realiza a destruição final de m_contained. |
| CComPolyObject::QueryInterface | Recupera um ponteiro para a interface solicitada. |
| CComPolyObject::Release | Diminui a contagem de referências do objeto. |
Membros de Dados Públicos
| Nome | Description |
|---|---|
| CComPolyObject::m_contained | Os delegados IUnknown chamam para o desconhecido exterior se o objeto estiver agregado ou para o IUnknown do objeto se o objeto não for agregado. |
Observações
CComPolyObject implementa IUnknown para um objeto agregado ou não agregado.
Quando uma instância de CComPolyObject é criada, verifica-se o valor do desconhecido exterior. Se for NULL, IUnknown é implementado para um objeto não agregado. Se o desconhecido exterior não for NULL, IUnknown é implementado para um objeto agregado.
A vantagem de usar CComPolyObject é que evita ter tanto CComAggObject como CComObject no seu módulo para lidar com os casos agregados e não agregados. Um único CComPolyObject objeto trata ambos os casos. Isto significa que só existem uma cópia da vtable e uma cópia das funções no seu módulo. Se a sua vtable for grande, isso pode diminuir substancialmente o tamanho do seu módulo. No entanto, se a sua vtable for pequena, a utilização CComPolyObject pode resultar num tamanho ligeiramente maior do módulo porque não está otimizada para um objeto agregado ou não agregado, tal como são CComAggObject e CComObject.
Se o macro DECLARE_POLY_AGGREGATABLE estiver especificado na definição da classe do seu objeto, CComPolyObject será usado para criar o seu objeto. DECLARE_POLY_AGGREGATABLE será automaticamente declarado se usar o Assistente de Projeto ATL para criar um controlo total ou controlo do Internet Explorer.
Se agregado, o CComPolyObject objeto tem o seu próprio IUnknown, separado do objeto IUnknownexterior , e mantém a sua própria contagem de referência.
CComPolyObject usa CComContainedObject para delegar ao desconhecido exterior.
Para mais informações sobre agregação, consulte o artigo Fundamentos dos Objetos COM ATL.
Hierarquia de herança
CComObjectRootBase
IUnknown
CComPolyObject
Requerimentos
Cabeçalho: atlcom.h
CComPolyObject::AddRef
Incrementa a contagem de referência no objeto.
STDMETHOD_(ULONG, AddRef)();
Valor de retorno
Um valor que pode ser útil para diagnósticos ou testes.
CComPolyObject::CComPolyObject
O construtor.
CComPolyObject(void* pv);
Parâmetros
PV
[dentro] Um ponteiro para o desconhecido exterior se o objeto for agregado, ou NULL se o objeto não for agregado.
Observações
Inicializa o CComContainedObject elemento de dados, m_contained, e incrementa a contagem de bloqueios do módulo.
O destruidor diminui a contagem de bloqueios do módulo.
CComPolyObject::~CComPolyObject
O destruidor.
~CComPolyObject();
Observações
Liberta todos os recursos alocados, chama o FinalRelease e diminui a contagem de bloqueios de módulos.
CComPolyObject::CreateInstance
Permite criar um novo objeto CComPolyObject<contained> sem a sobrecarga do CoCreateInstance.
static HRESULT WINAPI CreateInstance(
LPUNKNOWN pUnkOuter,
CComPolyObject<contained>** pp);
Parâmetros
pp
[fora] Um ponteiro para um ponteiro CComPolyObject<contained> . Se CreateInstance não for bem-sucedido, pp é definido como NULL.
Valor de retorno
Um valor HRESULT padrão.
Observações
O objeto devolvido tem uma contagem de referência zero, por isso chama AddRef imediatamente e depois usa Release para libertar a referência no ponteiro do objeto quando terminares.
Se não precisares de acesso direto ao objeto, mas ainda assim quiseres criar um novo objeto sem a sobrecarga de CoCreateInstance, usa CComCoClass::CreateInstance em vez disso.
CComPolyObject::FinalConstruct
Chamado durante as fases finais da construção do objeto, este método realiza qualquer inicialização final no m_contained elemento de dados.
HRESULT FinalConstruct();
Valor de retorno
Um valor HRESULT padrão.
CComPolyObject::FinalRelease
Chamado durante a destruição de objetos, este método liberta o m_contained elemento de dados.
void FinalRelease();
CComPolyObject::m_contained
Um objeto CComContainedObject derivado da tua classe.
CComContainedObject<contained> m_contained;
Parâmetros
contido
[dentro] A sua classe, derivada de CComObjectRoot ou CComObjectRootEx, bem como de quaisquer outras interfaces que queira suportar no objeto.
Observações
IUnknown chamadas através m_contained são atribuídas ao desconhecido exterior se o objeto for agregado, ou ao IUnknown de este objeto se o objeto não for agregado.
CComPolyObject::QueryInterface
Recupera um ponteiro para a interface solicitada.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT QueryInterface(Q** pp);
Parâmetros
Q
A interface COM.
IID
[dentro] O identificador da interface a ser solicitada.
ppvObject
[fora] Um apontador para o ponteiro de interface identificado por iid. Se o objeto não suportar esta interface, o ppvObject é definido como NULL.
pp
[fora] Um ponteiro para a interface identificada por __uuidof(Q).
Valor de retorno
Um valor HRESULT padrão.
Observações
Para um objeto agregado, se a interface solicitada for IUnknown, QueryInterface devolve um ponteiro ao objeto agregado IUnknown e incrementa a contagem de referências. Caso contrário, este método consulta a interface através do CComContainedObject membro de dados, m_contained.
CComPolyObject::Release
Diminui a contagem de referência no objeto.
STDMETHOD_(ULONG, Release)();
Valor de retorno
Em compilações de depuração, Release devolve um valor que pode ser útil para diagnóstico ou testes. Em builds sem debug, Release devolve sempre 0.
Consulte também
Classe CComObjectRootEx
DECLARE_POLY_AGGREGATABLE
Visão geral da classe