Partilhar via


CComClassClasse de Fábrica

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 a interface IClassFactory .

Sintaxe

class CComClassFactory
    : public IClassFactory,
      public CComObjectRootEx<CComGlobalsThreadModel>

Membros

Métodos Públicos

Nome Description
CComClassFactory::CreateInstance Cria um objeto do CLSID especificado.
CComClassFactory::LockServer Tranca a fábrica da classe em memória.

Observações

CComClassFactory implementa a interface IClassFactory , que contém métodos para criar um objeto de um CLSID particular, bem como bloquear a fábrica de classes em memória para permitir a criação de novos objetos mais rapidamente. IClassFactory deve ser implementado para cada classe que regista no registo do sistema e à qual atribui um CLSID.

Os objetos ATL normalmente adquirem uma fábrica de classes derivando do CComCoClass. Esta classe inclui o macro DECLARE_CLASSFACTORY, que declara CComClassFactory como a classe fábrica por defeito. Para ultrapassar este padrão, especifique uma das DECLARE_CLASSFACTORYmacros XXX na definição da sua 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 sobrepor CreateInstance.

O ATL fornece três outros macros que declaram uma fábrica de classes:

Requerimentos

Cabeçalho: atlcom.h

CComClassFactory::CreateInstance

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

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

Parâmetros

PUnkOuter
[dentro] Se o objeto está a ser criado como parte de um agregado, então o pUnkOuter deve ser o desconhecido exterior. Caso contrário, pUnkOuter tem de ser NULL.

riid
[dentro] O IID da interface solicitada. Se pUnkOuter for non-NULL, riid deve ser IID_IUnknown.

ppvObj
[fora] Um ponteiro para o ponteiro de interface identificado por riid. Se o objeto não suportar esta interface, ppvObj é definido como NULL.

Valor de retorno

Um valor HRESULT padrão.

CComClassFactory::LockServer

Incrementa e diminui a contagem de bloqueios de módulos chamando _Module::Lock e _Module::Unlock, respetivamente.

STDMETHOD(LockServer)(BOOL fLock);

Parâmetros

fLock
[dentro] Se TRUE, a contagem de bloqueios é incrementada; caso contrário, o número de bloqueios é decrescente.

Valor de retorno

Um valor HRESULT padrão.

Observações

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

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

Consulte também

Classe CComObjectRootEx
CComGlobalsThreadModel
Visão geral da classe