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 da CLSID especificada.
CComClassFactory::LockServer Bloqueia a fábrica de classe 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.

Os objetos ATL normalmente adquirem uma fábrica de classes derivando de CComCoClass. Essa classe inclui a macro DECLARE_CLASSFACTORY, que declara como CComClassFactory a fábrica de classes padrão. Para substituir esse padrão, especifique uma das DECLARE_CLASSFACTORY macros XXX em sua definição de classe. Por exemplo, a DECLARE_CLASSFACTORY_EX macro 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

Header: atlcom.h

CComClassFactory::CreateInstance

Cria um objeto da CLSID especificada e recupera um ponteiro de interface para esse objeto.

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

Parâmetros

Punkouter
[in] 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 for não NULL, riid deverá ser IID_IUnknown.

Ppvobj
[out] Um ponteiro para o ponteiro de interface identificado por riid. Se o objeto não dá suporte a essa interface, ppvObj é definido como NULL.

Valor Retornado

Um valor HRESULT padrão.

CComClassFactory::LockServer

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

STDMETHOD(LockServer)(BOOL fLock);

Parâmetros

Rebanho
[in] Se TRUE, a contagem de bloqueios será incrementada; caso contrário, a contagem de bloqueios será decrementada.

Valor Retornado

Um valor HRESULT padrão.

Comentários

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

Chamar 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 classe