CComClassFactory (clase)
Esta clase implementa la interfaz IClassFactory2.
Sintaxis
class CComClassFactory
: public IClassFactory,
public CComObjectRootEx<CComGlobalsThreadModel>
Miembros
Métodos públicos
Nombre | Descripción |
---|---|
CComClassFactory::CreateInstance | Crea un objeto del elemento CLSID especificado. |
CComClassFactory::LockServer | Bloquea el generador de clases en memoria. |
Comentarios
CComClassFactory
implementa la interfaz IClassFactory, que contiene métodos para crear un objeto de un CLSID determinado, así como bloquear el generador de clases en memoria para permitir que se creen nuevos objetos más rápidamente. IClassFactory
debe implementarse para cada clase que registre en el Registro del sistema y a la que asigne un CLSID.
Normalmente, los objetos ATL adquieren un generador de clases al derivar de CComCoClass. Esta clase incluye la macro DECLARE_CLASSFACTORY, que declara que CComClassFactory
es el generador de clases predeterminado. Para invalidar este valor predeterminado, especifique una de las macros DECLARE_CLASSFACTORY
XXX en la definición de clase. Por ejemplo, la macro DECLARE_CLASSFACTORY_EX usa la clase especificada para el generador de clases:
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.
La definición de clase anterior especifica que CMyClassFactory
se usará como generador de clases predeterminado del objeto. CMyClassFactory
debe derivar de CComClassFactory
e invalidar CreateInstance
.
ATL proporciona otras tres macros que declaran un generador de clases:
DECLARE_CLASSFACTORY2 Usa CComClassFactory2, que controla la creación a través de una licencia.
DECLARE_CLASSFACTORY_AUTO_THREAD Usa CComClassFactoryAutoThread, que crea objetos en varios apartamentos.
DECLARE_CLASSFACTORY_SINGLETON Usa CComClassFactorySingleton, que construye un único objeto CComObjectGlobal.
Requisitos
Encabezado: atlcom.h
CComClassFactory::CreateInstance
Crea un objeto del CLSID especificado y recupera un puntero de interfaz a este objeto.
STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void** ppvObj);
Parámetros
pUnkOuter
[in] Si el objeto se crea como parte de un agregado, pUnkOuter debe ser el desconocido externo. De lo contrario, pUnkOuter debe ser null.
riid
[in] El IID de la interfaz solicitada. Si pUnkOuter no es null, riid debe ser IID_IUnknown
.
ppvObj
[out] Puntero al puntero de interfaz identificado por riid. Si el objeto no admite esta interfaz, ppvObj se establece en NULL.
Valor devuelto
Valor HRESULT estándar.
CComClassFactory::LockServer
Incrementa y disminuye el número de bloqueos del módulo llamando a _Module::Lock
y _Module::Unlock
, respectivamente.
STDMETHOD(LockServer)(BOOL fLock);
Parámetros
fLock
[in] Si es TRUE, se incrementa el recuento de bloqueos; de lo contrario, se reduce el recuento de bloqueos.
Valor devuelto
Valor HRESULT estándar.
Comentarios
_Module
hace referencia a la instancia global de CComModule o a una clase derivada de ella.
La llamada LockServer
permite que un cliente se mantenga en un generador de clases para que se puedan crear varios objetos rápidamente.
Consulte también
CComObjectRootEx (clase)
CComGlobalsThreadModel
Información general sobre la clase