Compartir a través de


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

CComObjectRootEx

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