Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Opmerking
De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.
Deze klasse implementeert de IClassFactory2-interface .
Syntaxis
template <class license>
class CComClassFactory2 : public IClassFactory2,
public CComObjectRootEx<CComGlobalsThreadModel>,
public license
Parameterwaarden
licentie
Een klasse die de volgende statische functies implementeert:
static BOOL VerifyLicenseKey( BSTR bstr );static BOOL GetLicenseKey( DWORD dwReserved, BSTR * pBstr );static BOOL IsLicenseValid( );
Leden
Openbare methoden
| Naam | Description |
|---|---|
| CComClassFactory2::CreateInstance | Hiermee maakt u een object van de opgegeven CLSID. |
| CComClassFactory2::CreateInstanceLic | Met een licentiesleutel maakt u een object van de opgegeven CLSID. |
| CComClassFactory2::GetLicInfo | Hiermee wordt informatie opgehaald over de licentiemogelijkheden van de klassefactory. |
| CComClassFactory2::LockServer | Vergrendelt de klassefactory in het geheugen. |
| CComClassFactory2::RequestLicKey | Hiermee maakt en retourneert u een licentiesleutel. |
Opmerkingen
CComClassFactory2 implementeert de IClassFactory2-interface , een uitbreiding van IClassFactory.
IClassFactory2 bepaalt het maken van objecten via een licentie. Een klassefactory die wordt uitgevoerd op een gelicentieerde machine kan een runtimelicentiesleutel bieden. Met deze licentiesleutel kan een toepassing objecten instantiëren wanneer er geen volledige machinelicentie bestaat.
ATL-objecten verwerven normaal gesproken een klassefactory door afgeleid van CComCoClass. Deze klasse bevat de macro-DECLARE_CLASSFACTORY, die CComClassFactory declareert als de standaardklassefactory. Als u wilt gebruiken CComClassFactory2, geeft u de DECLARE_CLASSFACTORY2 macro op in de klassedefinitie van uw object. Voorbeeld:
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, de sjabloonparameter moet CComClassFactory2de statische functies VerifyLicenseKeyimplementeren , GetLicenseKeyen IsLicenseValid. Hier volgt een voorbeeld van een eenvoudige licentieklasse:
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 is afgeleid van zowel CComClassFactory2Base als licentie.
CComClassFactory2Base, op zijn beurt afgeleid van IClassFactory2 en CComObjectRootEx< CComGlobalsThreadModel >.
Overnamehiërarchie
CComObjectRootBase
license
IClassFactory2
CComClassFactory2
Requirements
Koptekst: atlcom.h
CComClassFactory2::CreateInstance
Hiermee maakt u een object van de opgegeven CLSID en haalt u een interfaceaanwijzer naar dit object op.
STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void** ppvObj);
Parameterwaarden
pUnkOuter
[in] Als het object wordt gemaakt als onderdeel van een statistische functie, moet pUnkOuter het buitenste onbekende object zijn. Anders moet pUnkOuter NULL zijn.
riid
[in] De IID van de aangevraagde interface. Als pUnkOuter niet null is, moet riid zijn IID_IUnknown.
ppvObj
[uit] Een aanwijzer naar de interfacepointer die wordt geïdentificeerd door riid. Als het object deze interface niet ondersteunt, is ppvObj ingesteld op NULL.
Retourwaarde
Een standaard HRESULT-waarde.
Opmerkingen
Vereist dat de machine volledig is gelicentieerd. Als er geen volledige machinelicentie bestaat, roept u CreateInstanceLic aan.
CComClassFactory2::CreateInstanceLic
Vergelijkbaar met CreateInstance, behalve waarvoor CreateInstanceLic een licentiesleutel is vereist.
STDMETHOD(CreateInstanceLic)(
IUnknown* pUnkOuter,
IUnknown* /* pUnkReserved
*/,
REFIID riid,
BSTR bstrKey,
void** ppvObject);
Parameterwaarden
pUnkOuter
[in] Als het object wordt gemaakt als onderdeel van een statistische functie, moet pUnkOuter het buitenste onbekende object zijn. Anders moet pUnkOuter NULL zijn.
pUnkReserved
[in] Niet gebruikt. Moet NULL zijn.
riid
[in] De IID van de aangevraagde interface. Als pUnkOuter niet null is, moet riid zijn IID_IUnknown.
bstrKey
[in] De runtimelicentiesleutel die eerder is verkregen via een aanroep naar RequestLicKey. Deze sleutel is vereist om het object te maken.
ppvObject
[uit] Een aanwijzer naar de interfacepointer die is opgegeven door riid. Als het object deze interface niet ondersteunt, is ppvObject ingesteld op NULL.
Retourwaarde
Een standaard HRESULT-waarde.
Opmerkingen
U kunt een licentiesleutel verkrijgen met RequestLicKey. Als u een object wilt maken op een niet-gelicentieerde computer, moet u aanroepen CreateInstanceLic.
CComClassFactory2::GetLicInfo
Vult een LICINFO-structuur met informatie die de licentiemogelijkheden van de klassefactory beschrijft.
STDMETHOD(GetLicInfo)(LICINFO* pLicInfo);
Parameterwaarden
pLicInfo
[uit] Wijs een LICINFO structuur aan.
Retourwaarde
Een standaard HRESULT-waarde.
Opmerkingen
Het fRuntimeKeyAvail lid van deze structuur geeft aan of, gezien een licentiesleutel, de klassefactory toestaat dat objecten worden gemaakt op een niet-gelicentieerde machine. Het lid fLicVerified geeft aan of er een volledige machinelicentie bestaat.
CComClassFactory2::LockServer
Hiermee wordt het aantal modulevergrendelingen verhoogd en verminderd door respectievelijk aanroepen _Module::Lock en _Module::Unlock, .
STDMETHOD(LockServer)(BOOL fLock);
Parameterwaarden
Kudde
[in] Indien WAAR, wordt het aantal vergrendelingen verhoogd; anders wordt het aantal vergrendelingen afgebroken.
Retourwaarde
Een standaard HRESULT-waarde.
Opmerkingen
_Module verwijst naar het globale exemplaar van CComModule of een klasse die ervan is afgeleid.
Door aanroepen LockServer kan een client een klassefactory vasthouden, zodat meerdere objecten snel kunnen worden gemaakt.
CComClassFactory2::RequestLicKey
Hiermee maakt en retourneert u een licentiesleutel, mits het fRuntimeKeyAvail lid van de LICINFO-structuur WAAR is.
STDMETHOD(RequestLicKey)(DWORD dwReserved, BSTR* pbstrKey);
Parameterwaarden
dwReserved
[in] Niet gebruikt. Moet nul zijn.
pbstrKey
[uit] Wijs de licentiesleutel aan.
Retourwaarde
Een standaard HRESULT-waarde.
Opmerkingen
Er is een licentiesleutel vereist voor het aanroepen van CreateInstanceLic om een object te maken op een computer zonder licentie. Als fRuntimeKeyAvail onwaar is, kunnen objecten alleen worden gemaakt op een volledig gelicentieerde computer.
Roep GetLicInfo aan om de waarde van fRuntimeKeyAvail.
Zie ook
CComClassFactoryAutoThread-klasse
Klasse CComClassFactorySingleton
CComObjectRootEx-klasse
CComGlobalsThreadModel
Overzicht van klassen