Classe CComClassFactory

Essa classe implementa a interface IClassFactory.

Sintaxe

class CComClassFactory
    : public IClassFactory,
      public CComObjectRootEx<CComGlobalsThreadModel>

Membros

Métodos públicos

Nome Descrição
CComClassFactory::CreateInstance Cria um objeto do CLSID especificado.
CComClassFactory::LockServer Bloqueia a fábrica de classes na memória.

Comentários

CComClassFactory implementa a interface IClassFactory, que contém métodos para criar um objeto de um CLSID específico, bem como bloquear a fábrica de classes na memória para permitir que novos objetos sejam criados mais rapidamente. IClassFactory deve ser implementado para cada classe que você registrar no registro do sistema e para a qual você atribui um CLSID.

Objetos ATL normalmente adquirem uma fábrica de classes derivando de CComCoClass. Essa classe inclui a macro DECLARE_CLASSFACTORY, que declara CComClassFactory como a fábrica de classes padrão. Para substituir esse padrão, especifique uma das macros DECLARE_CLASSFACTORYXXX em sua definição de classe. Por exemplo, a macro DECLARE_CLASSFACTORY_EX usa a classe especificada para a fábrica de classes:

class ATL_NO_VTABLE CMyCustomClass :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CMyCustomClass, &CLSID_MyCustomClass>,
   public IDispatchImpl<IMyCustomClass, &IID_IMyCustomClass, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
   DECLARE_CLASSFACTORY_EX(CMyClassFactory)

   // Remainder of class declaration omitted.

A definição de classe acima especifica que CMyClassFactory será usada como a fábrica de classes padrão do objeto. CMyClassFactory deve derivar de CComClassFactory e substituir CreateInstance.

A ATL fornece três outras macros que declaram uma fábrica de classes:

Requisitos

Cabeçalho: atlcom.h

CComClassFactory::CreateInstance

Cria um objeto do CLSID especificado e recupera um ponteiro de interface para esse objeto.

STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void** ppvObj);

Parâmetros

pUnkOuter
[entrada] Se o objeto estiver sendo criado como parte de uma agregação, pUnkOuter deverá ser o desconhecido externo. Caso contrário, pUnkOuter deve ser NULL.

riid
[in] O IID da interface solicitada . Se pUnkOuter não for NULL, riid deverá ser IID_IUnknown.

ppvObj
[saída] Um ponteiro para o ponteiro da interface identificado por riid. Se o objeto não der suporte a essa interface, o ppvObj será definido como NULL.

Valor de retorno

Um valor HRESULT padrão.

CComClassFactory::LockServer

Incrementa e diminui a contagem de bloqueio do módulo chamando _Module::Lock e _Module::Unlock, respectivamente.

STDMETHOD(LockServer)(BOOL fLock);

Parâmetros

fLock
[entrada] Se TRUE, a contagem de bloqueios será incrementada, caso contrário, a contagem de bloqueios será diminuída.

Valor de retorno

Um valor HRESULT padrão.

Comentários

_Module refere-se à instância global do CComModule ou a uma classe derivada dela.

A chamada LockServer permite que um cliente mantenha uma fábrica de classes para que vários objetos possam ser criados rapidamente.

Confira também

Classe CComObjectRootEx
CComGlobalsThreadModel
Visão geral da aula