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 CComClassFactory2
das DECLARE_CLASSFACTORY2 Makro in der Klassendefinition des Objekts an. Zum 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 VerifyLicenseKey
GetLicenseKey
, , 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; }
};
CComClassFactory2
abgeleitet von sowohl als auch CComClassFactory2Base
von der Lizenz. CComClassFactory2Base
, wiederum abgeleitet von IClassFactory2
und CComObjectRootEx< CComGlobalsThreadModel >
.
Vererbungshierarchie
CComObjectRootBase
license
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