Clase CComClassFactory2
Esta clase implementa la interfaz IClassFactory2.
Sintaxis
template <class license>
class CComClassFactory2 : public IClassFactory2,
public CComObjectRootEx<CComGlobalsThreadModel>,
public license
Parámetros
license
Una clase que implementa las siguientes funciones estáticas:
static BOOL VerifyLicenseKey( BSTR bstr );
static BOOL GetLicenseKey( DWORD dwReserved, BSTR * pBstr );
static BOOL IsLicenseValid( );
Miembros
Métodos públicos
Nombre | Descripción |
---|---|
CComClassFactory2::CreateInstance | Crea un objeto del elemento CLSID especificado. |
CComClassFactory2::CreateInstanceLic | Si se le ha dado una clave de licencia, crea un objeto del CLSID especificado. |
CComClassFactory2::GetLicInfo | Recupera información que describe las funcionalidades de licencia del generador de clases. |
CComClassFactory2::LockServer | Bloquea el generador de clases en memoria. |
CComClassFactory2::RequestLicKey | Crea y devuelve una clave de licencia. |
Comentarios
CComClassFactory2
implementa la interfaz IClassFactory2, que es una extensión de IClassFactory. IClassFactory2
controla la creación de objetos mediante una licencia. Un generador de clases que se ejecuta en una máquina con licencia puede proporcionar una clave de licencia de tiempo de ejecución. Esta clave de licencia permite que una aplicación crea instancias de objetos cuando no existe una licencia de máquina completa.
Normalmente, los objetos ATL adquieren un generador de clases al derivar de CComCoClass. Esta clase incluye la macro DECLARE_CLASSFACTORY, que declara CComClassFactory como generador de clases predeterminado. Para usar CComClassFactory2
, especifique la macro DECLARE_CLASSFACTORY2 en la definición de clase del objeto. Por ejemplo:
class ATL_NO_VTABLE CMyClass2 :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyClass2, &CLSID_MyClass>,
public IDispatchImpl<IMyClass, &IID_IMyClass, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IDispatchImpl<IMyDualInterface, &__uuidof(IMyDualInterface), &LIBID_NVC_ATL_COMLib, /* wMajor = */ 1, /* wMinor = */ 0>
{
public:
DECLARE_CLASSFACTORY2(CMyLicense)
// Remainder of class declaration omitted
CMyLicense
, el parámetro de plantilla para CComClassFactory2
, debe implementar las funciones estáticas VerifyLicenseKey
, GetLicenseKey
y IsLicenseValid
. A continuación, se muestra un ejemplo de una clase de licencia simple:
class CMyLicense
{
protected:
static BOOL VerifyLicenseKey(BSTR bstr)
{
USES_CONVERSION;
return !lstrcmp(OLE2T(bstr), _T("My run-time license key"));
}
static BOOL GetLicenseKey(DWORD /*dwReserved*/, BSTR* pBstr)
{
USES_CONVERSION;
*pBstr = SysAllocString( T2OLE(_T("My run-time license key")));
return TRUE;
}
static BOOL IsLicenseValid() { return TRUE; }
};
CComClassFactory2
deriva de CComClassFactory2Base
y de la licencia. CComClassFactory2Base
, a su vez, deriva de IClassFactory2
y CComObjectRootEx< CComGlobalsThreadModel >
.
Jerarquía de herencia
CComObjectRootBase
license
IClassFactory2
CComClassFactory2
Requisitos
Encabezado: atlcom.h
CComClassFactory2::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.
Comentarios
Requiere que la máquina tenga una licencia completa. Si no existe una licencia de máquina completa, llame a CreateInstanceLic.
CComClassFactory2::CreateInstanceLic
De forma similar a CreateInstance, excepto que CreateInstanceLic
requiere una clave de licencia.
STDMETHOD(CreateInstanceLic)(
IUnknown* pUnkOuter,
IUnknown* /* pUnkReserved
*/,
REFIID riid,
BSTR bstrKey,
void** ppvObject);
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.
pUnkReserved
[in] No se utiliza. Debe ser NULL.
riid
[in] El IID de la interfaz solicitada. Si pUnkOuter no es null, riid debe ser IID_IUnknown
.
bstrKey
[in] Clave de licencia en tiempo de ejecución obtenida previamente de una llamada a RequestLicKey
. Esta clave es necesaria para crear el objeto.
ppvObject
[out] Puntero al puntero de interfaz especificado por riid. Si el objeto no admite esta interfaz, ppvObject se establece como null.
Valor devuelto
Valor HRESULT estándar.
Comentarios
Puede obtener una clave de licencia mediante RequestLicKey. Para crear un objeto en un equipo sin licencia, debe llamar a CreateInstanceLic
.
CComClassFactory2::GetLicInfo
Rellena una estructura LICINFO con información que describe las funcionalidades de licencia del generador de clases.
STDMETHOD(GetLicInfo)(LICINFO* pLicInfo);
Parámetros
pLicInfo
[out] Puntero a una estructura LICINFO
.
Valor devuelto
Valor HRESULT estándar.
Comentarios
El miembro fRuntimeKeyAvail
de esta estructura indica si el generador de clases permite crear objetos en un equipo sin licencia si se le da una. El miembro fLicVerified indica si existe una licencia de máquina completa.
CComClassFactory2::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 a LockServer
permite que un cliente se mantenga en un generador de clases para que se puedan crear varios objetos rápidamente.
CComClassFactory2::RequestLicKey
Crea y devuelve una clave de licencia, siempre que el miembro fRuntimeKeyAvail
de la estructura LICINFO sea TRUE.
STDMETHOD(RequestLicKey)(DWORD dwReserved, BSTR* pbstrKey);
Parámetros
dwReserved
[in] No se utiliza. Debe ser cero.
pbstrKey
[out] Puntero a la clave de licencia.
Valor devuelto
Valor HRESULT estándar.
Comentarios
Se requiere una clave de licencia para llamar a CreateInstanceLic para crear un objeto en un equipo sin licencia. Si fRuntimeKeyAvail
es FALSE, los objetos solo se pueden crear en un equipo con licencia completa.
Llame a GetLicInfo para recuperar el valor de fRuntimeKeyAvail
.
Consulte también
CComClassFactoryAutoThread (clase)
CComClassFactorySingleton (clase)
CComObjectRootEx (clase)
CComGlobalsThreadModel
Información general sobre la clase