Freigeben über


CComClassFactory2-Klasse

Diese Klasse implementiert die IClassFactory2-Schnittstelle .

Syntax

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

Parameter

license
Eine Klasse, die die folgenden statischen Funktionen implementiert:

  • static BOOL VerifyLicenseKey( BSTR bstr );

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

  • static BOOL IsLicenseValid( );

Member

Öffentliche Methoden

Name Beschreibung
CComClassFactory2::CreateInstance Erstellt ein Objekt der angegebenen CLSID.
CComClassFactory2::CreateInstanceLic Bei Einem Lizenzschlüssel wird ein Objekt der angegebenen CLSID erstellt.
CComClassFactory2::GetLicInfo Ruft Informationen zur Beschreibung der Lizenzierungsfunktionen der Klassenfactory ab.
CComClassFactory2::LockServer Sperrt die Klassenfactory im Arbeitsspeicher.
CComClassFactory2::RequestLicKey Erstellt und gibt einen Lizenzschlüssel zurück.

Hinweise

CComClassFactory2 implementiert die IClassFactory2-Schnittstelle , die eine Erweiterung von IClassFactory ist. IClassFactory2 steuert die Objekterstellung über eine Lizenz. Eine Klassenfactory, die auf einem lizenzierten Computer ausgeführt wird, kann einen Laufzeitlizenzschlüssel bereitstellen. Mit diesem Lizenzschlüssel kann eine Anwendung Objekte instanziieren, wenn keine vollständige Computerlizenz vorhanden ist.

ATL-Objekte erwerben normalerweise eine Klassenfactory, indem sie von CComCoClass abgeleitet wird. Diese Klasse enthält das Makro DECLARE_CLASSFACTORY, das CComClassFactory als Standardklassenfactory deklariert. Geben Sie zum Verwenden CComClassFactory2das DECLARE_CLASSFACTORY2 Makro in der Klassendefinition des Objekts an. Beispiel:

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, der Vorlagenparameter für CComClassFactory2, muss die statischen Funktionen VerifyLicenseKeyGetLicenseKey, , und IsLicenseValid. Im Folgenden sehen Sie ein Beispiel für eine einfache Lizenzklasse:

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

CComClassFactory2abgeleitet von sowohl als auch CComClassFactory2Base von der Lizenz. CComClassFactory2Base, wiederum abgeleitet von IClassFactory2 und CComObjectRootEx< CComGlobalsThreadModel >.

Vererbungshierarchie

CComObjectRootBase

license

Ccomobjectrootex

IClassFactory2

CComClassFactory2

Anforderungen

Kopfzeile: atlcom.h

CComClassFactory2::CreateInstance

Erstellt ein Objekt der angegebenen CLSID und ruft einen Schnittstellenzeiger auf dieses Objekt ab.

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

Parameter

pUnkOuter
[in] Wenn das Objekt als Teil eines Aggregats erstellt wird, muss "pUnkOuter " das äußere Unbekannte sein. Andernfalls muss "pUnkOuter" NULL sein.

riid
[in] Die IID der angeforderten -Schnittstelle. Wenn pUnkOuter ungleich NULL ist, muss riid sein IID_IUnknown.

ppvObj
[out] Ein Zeiger auf den Schnittstellenzeiger, der von riid identifiziert wird. Wenn das Objekt diese Schnittstelle nicht unterstützt, wird ppvObj auf NULL festgelegt.

Rückgabewert

Ein HRESULT-Standardwert.

Hinweise

Erfordert, dass der Computer vollständig lizenziert ist. Wenn keine vollständige Computerlizenz vorhanden ist, rufen Sie CreateInstanceLic auf.

CComClassFactory2::CreateInstanceLic

Ähnlich wie "CreateInstance", mit der Ausnahme, dass CreateInstanceLic ein Lizenzschlüssel erforderlich ist.

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

Parameter

pUnkOuter
[in] Wenn das Objekt als Teil eines Aggregats erstellt wird, muss "pUnkOuter " das äußere Unbekannte sein. Andernfalls muss "pUnkOuter" NULL sein.

pUnkReserved
[in] Wird nicht verwendet. Muss NULL sein.

riid
[in] Die IID der angeforderten -Schnittstelle. Wenn pUnkOuter ungleich NULL ist, muss riid sein IID_IUnknown.

bstrKey
[in] Der Laufzeitlizenzschlüssel, der zuvor von einem Aufruf von RequestLicKey. Dieser Schlüssel ist erforderlich, um das Objekt zu erstellen.

ppvObject
[out] Ein Zeiger auf den durch riid angegebenen Schnittstellenzeiger. Wenn das Objekt diese Schnittstelle nicht unterstützt, wird ppvObject auf NULL festgelegt.

Rückgabewert

Ein HRESULT-Standardwert.

Hinweise

Sie können einen Lizenzschlüssel mit RequestLicKey abrufen. Um ein Objekt auf einem nicht lizenzierten Computer zu erstellen, müssen Sie aufrufen CreateInstanceLic.

CComClassFactory2::GetLicInfo

Füllt eine LICINFO-Struktur mit Informationen, die die Lizenzierungsfunktionen der Klassenfactory beschreiben.

STDMETHOD(GetLicInfo)(LICINFO* pLicInfo);

Parameter

pLicInfo
[out] Zeiger auf eine LICINFO Struktur.

Rückgabewert

Ein HRESULT-Standardwert.

Hinweise

Das fRuntimeKeyAvail Element dieser Struktur gibt an, ob die Klassenfactory anhand eines Lizenzschlüssels Objekte auf einem nicht lizenzierten Computer erstellen kann. Der fLicVerified-Member gibt an, ob eine vollständige Computerlizenz vorhanden ist.

CComClassFactory2::LockServer

Erhöht und erhöht die Anzahl der Modulsperren durch Aufrufen _Module::Lock bzw _Module::Unlock.

STDMETHOD(LockServer)(BOOL fLock);

Parameter

Herde
[in] Wenn WAHR, wird die Sperranzahl erhöht; andernfalls wird die Sperranzahl erhöht.

Rückgabewert

Ein HRESULT-Standardwert.

Hinweise

_Module bezieht sich auf die globale Instanz von CComModule oder eine von ihr abgeleitete Klasse.

Durch Das Aufrufen LockServer kann ein Client eine Klassenfactory speichern, sodass mehrere Objekte schnell erstellt werden können.

CComClassFactory2::RequestLicKey

Erstellt und gibt einen Lizenzschlüssel zurück, vorausgesetzt, das fRuntimeKeyAvail Mitglied der LICINFO-Struktur ist WAHR.

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

Parameter

dwReserved
[in] Wird nicht verwendet. Muss Null sein.

pbstrKey
[out] Zeigen Sie auf den Lizenzschlüssel.

Rückgabewert

Ein HRESULT-Standardwert.

Hinweise

Zum Aufrufen von CreateInstanceLic ist ein Lizenzschlüssel erforderlich, um ein Objekt auf einem nicht lizenzierten Computer zu erstellen. Ist fRuntimeKeyAvail FALSE, können Objekte nur auf einem vollständig lizenzierten Computer erstellt werden.

Rufen Sie GetLicInfo auf, um den Wert von fRuntimeKeyAvail.

Siehe auch

CComClassFactoryAutoThread-Klasse
CComClassFactorySingleton-Klasse
CComObjectRootEx-Klasse
CComGlobalsThreadModel
Klassenübersicht