CComClassFactory2, classe
Cette classe implémente l’interface IClassFactory2 .
template <class license>
class CComClassFactory2 : public IClassFactory2,
public CComObjectRootEx<CComGlobalsThreadModel>,
public license
licence
Classe qui implémente les fonctions statiques suivantes :
static BOOL VerifyLicenseKey( BSTR bstr );
static BOOL GetLicenseKey( DWORD dwReserved, BSTR * pBstr );
static BOOL IsLicenseValid( );
Nom | Description |
---|---|
CComClassFactory2 ::CreateInstance | Crée un objet du CLSID spécifié. |
CComClassFactory2 ::CreateInstanceLic | En fonction d’une clé de licence, crée un objet du CLSID spécifié. |
CComClassFactory2 ::GetLicInfo | Récupère des informations décrivant les fonctionnalités de licence de la fabrique de classes. |
CComClassFactory2 ::LockServer | Verrouille la fabrique de classe en mémoire. |
CComClassFactory2 ::RequestLicKey | Crée et retourne une clé de licence. |
CComClassFactory2
implémente l’interface IClassFactory2 , qui est une extension de IClassFactory. IClassFactory2
contrôle la création d’objets via une licence. Une fabrique de classes s’exécutant sur une machine sous licence peut fournir une clé de licence au moment de l’exécution. Cette clé de licence permet à une application d’instancier des objets lorsqu’une licence d’ordinateur complète n’existe pas.
Les objets ATL acquièrent normalement une fabrique de classes en dérivant de CComCoClass. Cette classe inclut la macro DECLARE_CLASSFACTORY, qui déclare CComClassFactory comme fabrique de classe par défaut. Pour utiliser CComClassFactory2
, spécifiez la macro DECLARE_CLASSFACTORY2 dans la définition de classe de votre objet. Par exemple :
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
, le paramètre de modèle sur CComClassFactory2
, doit implémenter les fonctions statiques VerifyLicenseKey
, GetLicenseKey
et IsLicenseValid
. Voici un exemple de classe de licence 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
dérive à la fois CComClassFactory2Base
de la licence et de la licence. CComClassFactory2Base
, à son tour, dérive de IClassFactory2
et CComObjectRootEx< CComGlobalsThreadModel >
.
CComObjectRootBase
license
IClassFactory2
CComClassFactory2
En-tête : atlcom.h
Crée un objet du CLSID spécifié et récupère un pointeur d’interface vers cet objet.
STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void** ppvObj);
pUnkOuter
[in] Si l’objet est créé dans le cadre d’un agrégat, pUnkOuter doit être l’inconnu externe. Sinon, pUnkOuter doit être NULL.
riid
[in] IID de l’interface demandée. Si pUnkOuter n’est pas NULL, riid doit être IID_IUnknown
.
ppvObj
[out] Pointeur vers le pointeur d’interface identifié par riid. Si l’objet ne prend pas en charge cette interface, ppvObj a la valeur NULL.
Valeur HRESULT standard.
Exige que la machine soit entièrement sous licence. Si une licence de machine complète n’existe pas, appelez CreateInstanceLic.
Similaire à CreateInstance, sauf qu’il CreateInstanceLic
nécessite une clé de licence.
STDMETHOD(CreateInstanceLic)(
IUnknown* pUnkOuter,
IUnknown* /* pUnkReserved
*/,
REFIID riid,
BSTR bstrKey,
void** ppvObject);
pUnkOuter
[in] Si l’objet est créé dans le cadre d’un agrégat, pUnkOuter doit être l’inconnu externe. Sinon, pUnkOuter doit être NULL.
pUnkReserved
[in] Non utilisé. Doit être NULL.
riid
[in] IID de l’interface demandée. Si pUnkOuter n’est pas NULL, riid doit être IID_IUnknown
.
bstrKey
[in] Clé de licence au moment de l’exécution obtenue précédemment à partir d’un appel à RequestLicKey
. Cette clé est requise pour créer l’objet.
ppvObject
[out] Pointeur vers le pointeur d’interface spécifié par riid. Si l’objet ne prend pas en charge cette interface, ppvObject a la valeur NULL.
Valeur HRESULT standard.
Vous pouvez obtenir une clé de licence à l’aide de RequestLicKey. Pour créer un objet sur un ordinateur sans licence, vous devez appeler CreateInstanceLic
.
Remplit une structure LICINFO avec des informations qui décrivent les fonctionnalités de licence de la fabrique de classes.
STDMETHOD(GetLicInfo)(LICINFO* pLicInfo);
pLicInfo
[out] Pointeur vers une LICINFO
structure.
Valeur HRESULT standard.
Le fRuntimeKeyAvail
membre de cette structure indique si, en fonction d’une clé de licence, la fabrique de classes permet de créer des objets sur une machine non autorisée. Le membre fLicVerified indique si une licence d’ordinateur complète existe.
Incrémente et décrémente le nombre de verrous du module en appelant _Module::Lock
et _Module::Unlock
, respectivement.
STDMETHOD(LockServer)(BOOL fLock);
troupeau
[in] Si la valeur est TRUE, le nombre de verrous est incrémenté ; sinon, le nombre de verrous est décrémenté.
Valeur HRESULT standard.
_Module
fait référence à l’instance globale de CComModule ou à une classe dérivée de celle-ci.
L’appel LockServer
permet à un client de conserver une fabrique de classes afin que plusieurs objets puissent être créés rapidement.
Crée et retourne une clé de licence, à condition que le fRuntimeKeyAvail
membre de la structure LICINFO soit TRUE.
STDMETHOD(RequestLicKey)(DWORD dwReserved, BSTR* pbstrKey);
dwReserved
[in] Non utilisé. Doit être zéro.
pbstrKey
[out] Pointeur vers la clé de licence.
Valeur HRESULT standard.
Une clé de licence est requise pour appeler CreateInstanceLic pour créer un objet sur un ordinateur sans licence. Si fRuntimeKeyAvail
la valeur est FALSE, les objets ne peuvent être créés que sur un ordinateur entièrement sous licence.
Appelez GetLicInfo pour récupérer la valeur de fRuntimeKeyAvail
.
CComClassFactoryAutoThread, classe
CComClassFactorySingleton, classe
CComObjectRootEx, classe
CComGlobalsThreadModel
Vue d’ensemble de la classe