CComClassFactory2, classe
Cette classe implémente l’interface IClassFactory2 .
Syntaxe
template <class license>
class CComClassFactory2 : public IClassFactory2,
public CComObjectRootEx<CComGlobalsThreadModel>,
public license
Paramètres
licence
Classe qui implémente les fonctions statiques suivantes :
static BOOL VerifyLicenseKey( BSTR bstr );
static BOOL GetLicenseKey( DWORD dwReserved, BSTR * pBstr );
static BOOL IsLicenseValid( );
Membres
Méthodes publiques
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. |
Notes
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 >
.
Hiérarchie d'héritage
CComObjectRootBase
license
IClassFactory2
CComClassFactory2
Spécifications
En-tête : atlcom.h
CComClassFactory2 ::CreateInstance
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);
Paramètres
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 de retour
Valeur HRESULT standard.
Notes
Exige que la machine soit entièrement sous licence. Si une licence de machine complète n’existe pas, appelez CreateInstanceLic.
CComClassFactory2 ::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);
Paramètres
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 de retour
Valeur HRESULT standard.
Notes
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
.
CComClassFactory2 ::GetLicInfo
Remplit une structure LICINFO avec des informations qui décrivent les fonctionnalités de licence de la fabrique de classes.
STDMETHOD(GetLicInfo)(LICINFO* pLicInfo);
Paramètres
pLicInfo
[out] Pointeur vers une LICINFO
structure.
Valeur de retour
Valeur HRESULT standard.
Notes
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.
CComClassFactory2 ::LockServer
Incrémente et décrémente le nombre de verrous du module en appelant _Module::Lock
et _Module::Unlock
, respectivement.
STDMETHOD(LockServer)(BOOL fLock);
Paramètres
troupeau
[in] Si la valeur est TRUE, le nombre de verrous est incrémenté ; sinon, le nombre de verrous est décrémenté.
Valeur de retour
Valeur HRESULT standard.
Notes
_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.
CComClassFactory2 ::RequestLicKey
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);
Paramètres
dwReserved
[in] Non utilisé. Doit être zéro.
pbstrKey
[out] Pointeur vers la clé de licence.
Valeur de retour
Valeur HRESULT standard.
Notes
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
.
Voir aussi
CComClassFactoryAutoThread, classe
CComClassFactorySingleton, classe
CComObjectRootEx, classe
CComGlobalsThreadModel
Vue d’ensemble de la classe