Udostępnij za pośrednictwem


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ć CComClassFactory2metody , 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 VerifyLicenseKeystatyczne , GetLicenseKeyi 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; }
};

CComClassFactory2pochodzi zarówno z licencji, jak CComClassFactory2Base i . CComClassFactory2Base, z kolei pochodzi z IClassFactory2 i CComObjectRootEx< CComGlobalsThreadModel >.

Hierarchia dziedziczenia

CComObjectRootBase

license

CComObjectRootEx

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