Klasa CComClassFactory2
Ta klasa implementuje interfejs IClassFactory2 .
Składnia
template <class license>
class CComClassFactory2 : public IClassFactory2,
public CComObjectRootEx<CComGlobalsThreadModel>,
public license
Parametry
licencja
Klasa, która implementuje następujące funkcje statyczne:
static BOOL VerifyLicenseKey( BSTR bstr );
static BOOL GetLicenseKey( DWORD dwReserved, BSTR * pBstr );
static BOOL IsLicenseValid( );
Elementy członkowskie
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
CComClassFactory2::CreateInstance | Tworzy obiekt określonego identyfikatora CLSID. |
CComClassFactory2::CreateInstanceLic | Biorąc pod uwagę klucz licencji, tworzy obiekt określonego identyfikatora CLSID. |
CComClassFactory2::GetLicInfo | Pobiera informacje opisujące możliwości licencjonowania fabryki klas. |
CComClassFactory2::LockServer | Blokuje fabrykę klas w pamięci. |
CComClassFactory2::RequestLicKey | Tworzy i zwraca klucz licencji. |
Uwagi
CComClassFactory2
implementuje interfejs IClassFactory2 , który jest rozszerzeniem IClassFactory. IClassFactory2
steruje tworzeniem obiektów za pośrednictwem licencji. Fabryka klas wykonująca na licencjonowanej maszynie może zapewnić klucz licencji w czasie wykonywania. Ten klucz licencji umożliwia aplikacji utworzenie wystąpienia obiektów, gdy pełna licencja maszyny nie istnieje.
Obiekty ATL zwykle uzyskują fabrykę klas, wyprowadzając je z klasy CComCoClass. Ta klasa zawiera DECLARE_CLASSFACTORY makra, które deklaruje CComClassFactory jako domyślną fabrykę klas. Aby użyć CComClassFactory2
metody , określ makro DECLARE_CLASSFACTORY2 w definicji klasy obiektu. Na przykład:
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 szablonu do CComClassFactory2
, musi implementować funkcje VerifyLicenseKey
statyczne , GetLicenseKey
i IsLicenseValid
. Poniżej przedstawiono przykład prostej klasy licencji:
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
pochodzi zarówno z licencji, jak CComClassFactory2Base
i . CComClassFactory2Base
, z kolei pochodzi z IClassFactory2
i CComObjectRootEx< CComGlobalsThreadModel >
.
Hierarchia dziedziczenia
CComObjectRootBase
license
IClassFactory2
CComClassFactory2
Wymagania
Nagłówek: atlcom.h
CComClassFactory2::CreateInstance
Tworzy obiekt określonego identyfikatora CLSID i pobiera wskaźnik interfejsu do tego obiektu.
STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void** ppvObj);
Parametry
pUnkOuter
[in] Jeśli obiekt jest tworzony w ramach agregacji, element pUnkOuter musi być zewnętrznym nieznanym obiektem. W przeciwnym razie pUnkOuter musi mieć wartość NULL.
riid
[in] Identyfikator IID żądanego interfejsu. Jeśli parametr pUnkOuter ma wartość inną niż NULL, riid musi mieć wartość IID_IUnknown
.
ppvObj
[out] Wskaźnik do wskaźnika interfejsu zidentyfikowany przez riid. Jeśli obiekt nie obsługuje tego interfejsu, parametr ppvObj ma wartość NULL.
Wartość zwracana
Standardowa wartość HRESULT.
Uwagi
Wymaga, aby maszyna została w pełni licencjonowana. Jeśli pełna licencja maszynowa nie istnieje, wywołaj metodę CreateInstanceLic.
CComClassFactory2::CreateInstanceLic
Podobnie jak w przypadku klasy CreateInstance, z tą różnicą, że CreateInstanceLic
wymaga klucza licencji.
STDMETHOD(CreateInstanceLic)(
IUnknown* pUnkOuter,
IUnknown* /* pUnkReserved
*/,
REFIID riid,
BSTR bstrKey,
void** ppvObject);
Parametry
pUnkOuter
[in] Jeśli obiekt jest tworzony w ramach agregacji, element pUnkOuter musi być zewnętrznym nieznanym obiektem. W przeciwnym razie pUnkOuter musi mieć wartość NULL.
PUnkReserved
[in] Nieużytne. Musi mieć wartość NULL.
riid
[in] Identyfikator IID żądanego interfejsu. Jeśli parametr pUnkOuter ma wartość inną niż NULL, riid musi mieć wartość IID_IUnknown
.
bstrKey
[in] Klucz licencji w czasie wykonywania uzyskany wcześniej z wywołania metody RequestLicKey
. Ten klucz jest wymagany do utworzenia obiektu.
ppvObject
[out] Wskaźnik do wskaźnika interfejsu określonego przez riid. Jeśli obiekt nie obsługuje tego interfejsu, obiekt ppvObject ma ustawioną wartość NULL.
Wartość zwracana
Standardowa wartość HRESULT.
Uwagi
Klucz licencji można uzyskać przy użyciu elementu RequestLicKey. Aby utworzyć obiekt na maszynie bez licencji, należy wywołać metodę CreateInstanceLic
.
CComClassFactory2::GetLicInfo
Wypełnia strukturę LICINFO informacjami opisanymi możliwościami licencjonowania fabryki klas.
STDMETHOD(GetLicInfo)(LICINFO* pLicInfo);
Parametry
pLicInfo
[out] Wskaźnik do LICINFO
struktury.
Wartość zwracana
Standardowa wartość HRESULT.
Uwagi
Element fRuntimeKeyAvail
członkowski tej struktury wskazuje, czy na podstawie klucza licencji fabryka klas umożliwia tworzenie obiektów na maszynie bez licencji. Element członkowski fLicVerified wskazuje, czy istnieje pełna licencja komputera.
CComClassFactory2::LockServer
Zwiększa i dekrementuje liczbę blokad modułu przez wywołanie _Module::Lock
i _Module::Unlock
, odpowiednio.
STDMETHOD(LockServer)(BOOL fLock);
Parametry
stado
[in] Jeśli wartość TRUE, liczba blokad jest zwiększana; w przeciwnym razie liczba blokad jest dekrementowana.
Wartość zwracana
Standardowa wartość HRESULT.
Uwagi
_Module
odwołuje się do wystąpienia globalnego CComModule lub klasy pochodnej.
Wywołanie LockServer
umożliwia klientowi trzymanie się fabryki klas, dzięki czemu można szybko utworzyć wiele obiektów.
CComClassFactory2::RequestLicKey
Tworzy i zwraca klucz licencji, pod warunkiem że fRuntimeKeyAvail
element członkowski struktury LICINFO ma wartość TRUE.
STDMETHOD(RequestLicKey)(DWORD dwReserved, BSTR* pbstrKey);
Parametry
dwReserved
[in] Nieużytne. Musi być zero.
pbstrKey
[out] Wskaźnik do klucza licencji.
Wartość zwracana
Standardowa wartość HRESULT.
Uwagi
Klucz licencji jest wymagany do wywoływania metody CreateInstanceLic w celu utworzenia obiektu na maszynie nielicencjonowanej. Jeśli fRuntimeKeyAvail
ma wartość FALSE, obiekty można tworzyć tylko na w pełni licencjonowanej maszynie.
Wywołaj metodę GetLicInfo, aby pobrać wartość .fRuntimeKeyAvail
Zobacz też
Klasa CComClassFactoryAutoThread
Klasa CComClassFactorySingleton
Klasa CComObjectRootEx
CComGlobalsThreadModel
Omówienie klasy