Sdílet prostřednictvím


CComClassFactory2 – třída

Tato třída implementuje IClassFactory2 rozhraní.

Syntaxe

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

Parametry

licence
Třída, která implementuje následující statické funkce:

  • static BOOL VerifyLicenseKey( BSTR bstr );

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

  • static BOOL IsLicenseValid( );

Členové

Veřejné metody

Název Popis
CComClassFactory2::CreateInstance Vytvoří objekt zadaného CLSID.
CComClassFactory2::CreateInstanceLic Při zadání licenčního klíče vytvoří objekt zadaného IDENTIFIKÁTORu CLSID.
CComClassFactory2::GetLicInfo Načte informace popisující možnosti licencování objektu pro vytváření tříd.
CComClassFactory2::LockServer Uzamkne objekt pro vytváření tříd v paměti.
CComClassFactory2::RequestLicKey Vytvoří a vrátí licenční klíč.

Poznámky

CComClassFactory2 implementuje IClassFactory2 rozhraní, což je rozšíření IClassFactory. IClassFactory2 řídí vytváření objektů prostřednictvím licence. Objekt pro vytváření tříd spuštěný na licencovaný počítač může poskytnout licenční klíč za běhu. Tento licenční klíč umožňuje aplikaci vytvořit instanci objektů, pokud neexistuje úplná licence počítače.

Objekty ATL obvykle získávají objekt pro vytváření tříd odvozením z CComCoClass. Tato třída obsahuje DECLARE_CLASSFACTORY makra, které deklaruje CComClassFactory jako výchozí objekt pro vytváření tříd. Chcete-li použít CComClassFactory2, zadejte DECLARE_CLASSFACTORY2 makro v definici třídy objektu. Příklad:

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, parametr šablony pro CComClassFactory2, musí implementovat statické funkce VerifyLicenseKey, GetLicenseKeya IsLicenseValid. Následuje příklad jednoduché třídy licence:

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 je odvozena z obou CComClassFactory2Base a licencí. CComClassFactory2Basenaopak je odvozeno od IClassFactory2 a CComObjectRootEx< CComGlobalsThreadModel >.

Hierarchie dědičnosti

CComObjectRootBase

license

CComObjectRootEx

IClassFactory2

CComClassFactory2

Požadavky

Hlavička: atlcom.h

CComClassFactory2::CreateInstance

Vytvoří objekt zadaného CLSID a načte ukazatel rozhraní na tento objekt.

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

Parametry

pUnkOuter
[v] Pokud se objekt vytváří jako součást agregace, musí být pUnkOuter vnějším neznámým objektem. V opačném případě musí být hodnota pUnkOuter null.

riid
[v] IID požadovaného rozhraní. Pokud hodnota pUnkOuter není null, riid musí být IID_IUnknown.

ppvObj
[ven] Ukazatel na ukazatel rozhraní identifikovaný riidem. Pokud objekt nepodporuje toto rozhraní, ppvObj je nastaven na HODNOTU NULL.

Návratová hodnota

Standardní hodnota HRESULT.

Poznámky

Vyžaduje, aby byl počítač plně licencovaný. Pokud úplná licence počítače neexistuje, zavolejte CreateInstanceLic.

CComClassFactory2::CreateInstanceLic

Podobá se createInstance s tím rozdílem, že CreateInstanceLic vyžaduje licenční klíč.

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

Parametry

pUnkOuter
[v] Pokud se objekt vytváří jako součást agregace, musí být pUnkOuter vnějším neznámým objektem. V opačném případě musí být hodnota pUnkOuter null.

pUnkReserved
[v] Nepoužívá se. Musí mít hodnotu NULL.

riid
[v] IID požadovaného rozhraní. Pokud hodnota pUnkOuter není null, riid musí být IID_IUnknown.

bstrKey
[v] Licenční klíč za běhu dříve získaný z volání do RequestLicKey. Tento klíč je nutný k vytvoření objektu.

ppvObject
[ven] Ukazatel na ukazatel rozhraní určený riidem. Pokud objekt nepodporuje toto rozhraní, ppvObject je nastaven na HODNOTU NULL.

Návratová hodnota

Standardní hodnota HRESULT.

Poznámky

Licenční klíč můžete získat pomocí RequestLicKey. Chcete-li vytvořit objekt na nelicencovaný počítač, musíte volat CreateInstanceLic.

CComClassFactory2::GetLicInfo

Vyplní strukturu LICINFO informacemi, které popisují možnosti licencování objektu pro vytváření tříd.

STDMETHOD(GetLicInfo)(LICINFO* pLicInfo);

Parametry

pLicInfo
[ven] Ukazatel na LICINFO strukturu

Návratová hodnota

Standardní hodnota HRESULT.

Poznámky

Člen fRuntimeKeyAvail této struktury určuje, zda objekt pro vytváření tříd umožňuje, aby se objekty vytvořily na nelicencovaném počítači. Člen fLicVerified označuje, zda existuje úplná licence počítače.

CComClassFactory2::LockServer

Zvýší a sníží počet zámků modulu voláním _Module::Lock a _Module::Unlockv uvedeném pořadí.

STDMETHOD(LockServer)(BOOL fLock);

Parametry

hejno
[v] Je-li pravda, počet zámků se zvýší; jinak se počet zámků sníží.

Návratová hodnota

Standardní hodnota HRESULT.

Poznámky

_Module odkazuje na globální instanci CComModule nebo třídy odvozené z ní.

Volání LockServer umožňuje klientovi držet se objektu pro vytváření tříd, aby bylo možné rychle vytvořit více objektů.

CComClassFactory2::RequestLicKey

Vytvoří a vrátí licenční klíč za předpokladu, že fRuntimeKeyAvail člen struktury LICINFO je TRUE.

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

Parametry

dwReserved
[v] Nepoužívá se. Musí být nula.

pbstrKey
[ven] Ukazatel na licenční klíč.

Návratová hodnota

Standardní hodnota HRESULT.

Poznámky

Pro volání CreateInstanceLic se vyžaduje licenční klíč k vytvoření objektu na nelicencovaném počítači. Pokud fRuntimeKeyAvail je FALSE, lze objekty vytvořit pouze na plně licencovaném počítači.

Volání GetLicInfo načtení hodnoty fRuntimeKeyAvail.

Viz také

CComClassFactoryAutoThread – třída
CComClassFactorySingleton – třída
CComObjectRootEx – třída
CComGlobalsThreadModel
Přehled třídy