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 VerifyLicenseKey
statiche , GetLicenseKey
e 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; }
};
CComClassFactory2
deriva da entrambe CComClassFactory2Base
le licenze e . CComClassFactory2Base
, a sua volta, deriva da IClassFactory2
e CComObjectRootEx< CComGlobalsThreadModel >
.
Gerarchia di ereditarietà
CComObjectRootBase
license
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