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_CLASSFACTORY
XXX 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:
DECLARE_CLASSFACTORY2 Usa CComClassFactory2, que controla a criação por meio de uma licença.
DECLARE_CLASSFACTORY_AUTO_THREAD Usa CComClassFactoryAutoThread, que cria objetos em vários apartments.
DECLARE_CLASSFACTORY_SINGLETON Usa CComClassFactorySingleton, que constrói um único objeto CComObjectGlobal.
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