Bagikan melalui


Kelas CComClassFactory2

Kelas ini mengimplementasikan antarmuka IClassFactory2 .

Sintaks

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

Parameter

lisensi
Kelas yang mengimplementasikan fungsi statis berikut:

  • static BOOL VerifyLicenseKey( BSTR bstr );

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

  • static BOOL IsLicenseValid( );

Anggota

Metode Publik

Nama Deskripsi
CComClassFactory2::CreateInstance Membuat objek DARI CLSID yang ditentukan.
CComClassFactory2::CreateInstanceLic Mengingat kunci lisensi, membuat objek CLSID yang ditentukan.
CComClassFactory2::GetLicInfo Mengambil informasi yang menjelaskan kemampuan lisensi pabrik kelas.
CComClassFactory2::LockServer Mengunci pabrik kelas dalam memori.
CComClassFactory2::RequestLicKey Membuat dan mengembalikan kunci lisensi.

Keterangan

CComClassFactory2mengimplementasikan antarmuka IClassFactory2, yang merupakan ekstensi dari IClassFactory. IClassFactory2 mengontrol pembuatan objek melalui lisensi. Pabrik kelas yang dijalankan pada mesin berlisensi dapat menyediakan kunci lisensi run-time. Kunci lisensi ini memungkinkan aplikasi untuk membuat instans objek ketika lisensi komputer penuh tidak ada.

Objek ATL biasanya memperoleh pabrik kelas dengan berasal dari CComCoClass. Kelas ini mencakup DECLARE_CLASSFACTORY makro, yang mendeklarasikan CComClassFactory sebagai pabrik kelas default. Untuk menggunakan CComClassFactory2, tentukan makro DECLARE_CLASSFACTORY2 dalam definisi kelas objek Anda. Contohnya:

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, parameter templat ke CComClassFactory2, harus mengimplementasikan fungsi VerifyLicenseKeystatis , , GetLicenseKeydan IsLicenseValid. Berikut ini adalah contoh kelas lisensi sederhana:

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 berasal dari dan CComClassFactory2Baselisensi. CComClassFactory2Base, pada gilirannya, berasal dari IClassFactory2 dan CComObjectRootEx< CComGlobalsThreadModel >.

Hierarki Warisan

CComObjectRootBase

license

CComObjectRootEx

IClassFactory2

CComClassFactory2

Persyaratan

Header: atlcom.h

CComClassFactory2::CreateInstance

Membuat objek CLSID yang ditentukan dan mengambil penunjuk antarmuka ke objek ini.

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

Parameter

pUnkOuter
[di] Jika objek sedang dibuat sebagai bagian dari agregat, maka pUnkOuter harus menjadi bagian luar yang tidak diketahui. Jika tidak, pUnkOuter harus NULL.

riid
[masuk] IID antarmuka yang diminta . Jika pUnkOuter non-NULL, riid harus IID_IUnknown.

ppvObj
[out] Penunjuk ke penunjuk antarmuka yang diidentifikasi oleh riid. Jika objek tidak mendukung antarmuka ini, ppvObj diatur ke NULL.

Tampilkan Nilai

Nilai HRESULT standar.

Keterangan

Mengharuskan komputer dilisensikan sepenuhnya. Jika lisensi komputer lengkap tidak ada, panggil CreateInstanceLic.

CComClassFactory2::CreateInstanceLic

Mirip dengan CreateInstance, kecuali yang CreateInstanceLic memerlukan kunci lisensi.

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

Parameter

pUnkOuter
[di] Jika objek sedang dibuat sebagai bagian dari agregat, maka pUnkOuter harus menjadi bagian luar yang tidak diketahui. Jika tidak, pUnkOuter harus NULL.

pUnkReserved
[in] Tidak digunakan. Harus NULL.

riid
[masuk] IID antarmuka yang diminta . Jika pUnkOuter non-NULL, riid harus IID_IUnknown.

bstrKey
[di] Kunci lisensi run-time yang sebelumnya diperoleh dari panggilan ke RequestLicKey. Kunci ini diperlukan untuk membuat objek.

ppvObject
[out] Penunjuk ke penunjuk antarmuka yang ditentukan oleh riid. Jika objek tidak mendukung antarmuka ini, ppvObject diatur ke NULL.

Tampilkan Nilai

Nilai HRESULT standar.

Keterangan

Anda dapat memperoleh kunci lisensi menggunakan RequestLicKey. Untuk membuat objek pada komputer yang tidak berlisensi, Anda harus memanggil CreateInstanceLic.

CComClassFactory2::GetLicInfo

Mengisi struktur LICINFO dengan informasi yang menjelaskan kemampuan lisensi pabrik kelas.

STDMETHOD(GetLicInfo)(LICINFO* pLicInfo);

Parameter

pLicInfo
[out] Penunjuk LICINFO ke struktur.

Tampilkan Nilai

Nilai HRESULT standar.

Keterangan

Anggota fRuntimeKeyAvail struktur ini menunjukkan apakah, diberi kunci lisensi, pabrik kelas memungkinkan objek dibuat pada mesin yang tidak berlisensi. Anggota fLicVerified menunjukkan apakah lisensi komputer lengkap ada.

CComClassFactory2::LockServer

Kenaikan dan penurunan jumlah kunci modul dengan memanggil _Module::Lock dan _Module::Unlock, masing-masing.

STDMETHOD(LockServer)(BOOL fLock);

Parameter

Kawanan
[di] Jika TRUE, jumlah kunci akan bertambah; jika tidak, jumlah kunci diderementasi.

Tampilkan Nilai

Nilai HRESULT standar.

Keterangan

_Module mengacu pada instans global CComModule atau kelas yang berasal darinya.

Panggilan LockServer memungkinkan klien untuk memegang pabrik kelas sehingga beberapa objek dapat dibuat dengan cepat.

CComClassFactory2::RequestLicKey

Membuat dan mengembalikan kunci lisensi, asalkan fRuntimeKeyAvail anggota struktur LICINFO ADALAH TRUE.

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

Parameter

dwReserved
[in] Tidak digunakan. Harus nol.

pbstrKey
[out] Penunjuk ke kunci lisensi.

Tampilkan Nilai

Nilai HRESULT standar.

Keterangan

Kunci lisensi diperlukan untuk memanggil CreateInstanceLic untuk membuat objek pada komputer tanpa lisensi. Jika fRuntimeKeyAvail FALSE, maka objek hanya dapat dibuat pada komputer berlisensi penuh.

Panggil GetLicInfo untuk mengambil nilai fRuntimeKeyAvail.

Baca juga

Kelas CComClassFactoryAutoThread
Kelas CComClassFactorySingleton
Kelas CComObjectRootEx
CComGlobalsThreadModel
Gambaran Umum Kelas