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:
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 CComClassFactorySinglob, que constrói um único objeto CComObjectGlobal .
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