Condividi tramite


Classe CComClassFactory2

Questa classe implementa l'interfaccia IClassFactory2 .

Sintassi

template <class license>
class CComClassFactory2 : public IClassFactory2,
    public CComObjectRootEx<CComGlobalsThreadModel>,
    public license

Parametri

license
Classe che implementa le funzioni statiche seguenti:

  • static BOOL VerifyLicenseKey( BSTR bstr );

  • static BOOL GetLicenseKey( DWORD dwReserved, BSTR * pBstr );

  • static BOOL IsLicenseValid( );

Membri

Metodi pubblici

Nome Descrizione
CComClassFactory2::CreateInstance Crea un oggetto del CLSID specificato.
CComClassFactory2::CreateInstanceLic Dato un codice di licenza, crea un oggetto del CLSID specificato.
CComClassFactory2::GetLicInfo Recupera informazioni che descrivono le funzionalità di licenza della class factory.
CComClassFactory2::LockServer Blocca la class factory in memoria.
CComClassFactory2::RequestLicKey Crea e restituisce un codice di licenza.

Osservazioni:

CComClassFactory2 implementa l'interfaccia IClassFactory2 , che è un'estensione di IClassFactory. IClassFactory2 controlla la creazione di oggetti tramite una licenza. Una class factory in esecuzione in un computer con licenza può fornire un codice di licenza in fase di esecuzione. Questo codice di licenza consente a un'applicazione di creare un'istanza di oggetti quando non esiste una licenza completa del computer.

Gli oggetti ATL acquisiscono normalmente una class factory derivando da CComCoClass. Questa classe include la macro DECLARE_CLASSFACTORY, che dichiara CComClassFactory come class factory predefinita. Per usare CComClassFactory2, specificare la macro DECLARE_CLASSFACTORY2 nella definizione della classe dell'oggetto. Ad esempio:

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, il parametro del modello in CComClassFactory2, deve implementare le funzioni VerifyLicenseKeystatiche , GetLicenseKeye IsLicenseValid. Di seguito è riportato un esempio di classe di licenza semplice:

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; }
};

CComClassFactory2deriva da entrambe CComClassFactory2Base le licenze e . CComClassFactory2Base, a sua volta, deriva da IClassFactory2 e CComObjectRootEx< CComGlobalsThreadModel >.

Gerarchia di ereditarietà

CComObjectRootBase

license

CComObjectRootEx

IClassFactory2

CComClassFactory2

Requisiti

Intestazione: atlcom.h

CComClassFactory2::CreateInstance

Crea un oggetto del CLSID specificato e recupera un puntatore di interfaccia a questo oggetto.

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

Parametri

pUnkOuter
[in] Se l'oggetto viene creato come parte di un'aggregazione, pUnkOuter deve essere l'elemento sconosciuto esterno. In caso contrario, pUnkOuter deve essere NULL.

riid
[in] IID dell'interfaccia richiesta. Se pUnkOuter è diverso da NULL, riid deve essere IID_IUnknown.

ppvObj
[out] Puntatore al puntatore all'interfaccia identificato da riid. Se l'oggetto non supporta questa interfaccia, ppvObj è impostato su NULL.

Valore restituito

Valore HRESULT standard.

Osservazioni:

Richiede che il computer sia completamente concesso in licenza. Se non esiste una licenza completa del computer, chiama CreateInstanceLic.

CComClassFactory2::CreateInstanceLic

Analogamente a CreateInstance, ad eccezione del fatto che CreateInstanceLic richiede un codice di licenza.

STDMETHOD(CreateInstanceLic)(
    IUnknown* pUnkOuter,
    IUnknown* /* pUnkReserved
*/,
    REFIID riid,
    BSTR bstrKey,
    void** ppvObject);

Parametri

pUnkOuter
[in] Se l'oggetto viene creato come parte di un'aggregazione, pUnkOuter deve essere l'elemento sconosciuto esterno. In caso contrario, pUnkOuter deve essere NULL.

pUnkReserved
[in] Non utilizzato. Deve essere NULL.

riid
[in] IID dell'interfaccia richiesta. Se pUnkOuter è diverso da NULL, riid deve essere IID_IUnknown.

bstrKey
[in] Chiave di licenza di runtime ottenuta in precedenza da una chiamata a RequestLicKey. Questa chiave è necessaria per creare l'oggetto .

ppvObject
[out] Puntatore al puntatore all'interfaccia specificato da riid. Se l'oggetto non supporta questa interfaccia, ppvObject è impostato su NULL.

Valore restituito

Valore HRESULT standard.

Osservazioni:

È possibile ottenere un codice di licenza usando RequestLicKey. Per creare un oggetto in un computer senza licenza, è necessario chiamare CreateInstanceLic.

CComClassFactory2::GetLicInfo

Riempie una struttura LICINFO con informazioni che descrivono le funzionalità di licenza della class factory.

STDMETHOD(GetLicInfo)(LICINFO* pLicInfo);

Parametri

pLicInfo
[out] Puntatore a una LICINFO struttura.

Valore restituito

Valore HRESULT standard.

Osservazioni:

Il fRuntimeKeyAvail membro di questa struttura indica se, data una chiave di licenza, la class factory consente la creazione di oggetti in un computer senza licenza. Il membro fLicVerified indica se esiste una licenza completa del computer.

CComClassFactory2::LockServer

Incrementa e decrementa il conteggio dei blocchi del modulo chiamando _Module::Lock rispettivamente e _Module::Unlock.

STDMETHOD(LockServer)(BOOL fLock);

Parametri

gregge
[in] Se TRUE, il conteggio dei blocchi viene incrementato; in caso contrario, il conteggio dei blocchi viene decrementato.

Valore restituito

Valore HRESULT standard.

Osservazioni:

_Module fa riferimento all'istanza globale di CComModule o a una classe derivata da essa.

La chiamata LockServer consente a un client di mantenere una class factory in modo che più oggetti possano essere creati rapidamente.

CComClassFactory2::RequestLicKey

Crea e restituisce un codice di licenza, purché il fRuntimeKeyAvail membro della struttura LICINFO sia TRUE.

STDMETHOD(RequestLicKey)(DWORD dwReserved, BSTR* pbstrKey);

Parametri

dwReserved
[in] Non utilizzato. Deve essere zero.

pbstrKey
[out] Puntatore al codice di licenza.

Valore restituito

Valore HRESULT standard.

Osservazioni:

Per chiamare CreateInstanceLic per creare un oggetto in un computer senza licenza, è necessario un codice di licenza. Se fRuntimeKeyAvail è FALSE, gli oggetti possono essere creati solo in un computer con licenza completa.

Chiamare GetLicInfo per recuperare il valore di fRuntimeKeyAvail.

Vedi anche

Classe CComClassFactoryAutoThread
Classe CComClassFactorySingleton
Classe CComObjectRootEx
CComGlobalsThreadModel
Cenni preliminari sulla classe