Share via


CComClassFactory2-klasse

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

CComObjectRootEx

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