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
, GetLicenseKey
a 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í. CComClassFactory2Base
naopak je odvozeno od IClassFactory2
a CComObjectRootEx< CComGlobalsThreadModel >
.
Hierarchie dědičnosti
CComObjectRootBase
license
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::Unlock
v 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