Partager via


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, GetLicenseKeyet 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

CComObjectRootEx

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