次の方法で共有


CComClassFactory2 クラス

このクラスは、IClassFactory2 インターフェイスを実装します。

構文

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

パラメーター

license (ライセンス)
次の静的関数を実装するクラス。

  • static BOOL VerifyLicenseKey( BSTR bstr );

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

  • static BOOL IsLicenseValid( );

メンバー

パブリック メソッド

名前 説明
CComClassFactory2::CreateInstance 指定した CLSID のオブジェクトを作成します。
CComClassFactory2::CreateInstanceLic ライセンス キーを指定したら、指定した CLSID のオブジェクトを作成します。
CComClassFactory2::GetLicInfo クラス ファクトリのライセンス機能を説明する情報を取得します。
CComClassFactory2::LockServer メモリ内のクラス ファクトリをロックします。
CComClassFactory2::RequestLicKey ライセンス キーを作成して返します。

解説

CComClassFactory2 は、IClassFactoryの拡張機能である IClassFactory2 インターフェイスを実装します。 IClassFactory2 は、ライセンスによるオブジェクトの作成を制御します。 ライセンスが付与されたマシンで実行されるクラス ファクトリは、実行時ライセンス キーを提供できます。 このライセンス キーを使用すると、完全なマシン ライセンスが存在しない場合に、アプリケーションでオブジェクトをインスタント化できます。

通常、ATL オブジェクトは、クラス ファクトリを CComCoClass から派生させて取得します。 このクラスには、CComClassFactory を既定のクラス ファクトリとして宣言する DECLARE_CLASSFACTORY マクロが含まれます。 CComClassFactory2 を使用するには、オブジェクトのクラス定義で DECLARE_CLASSFACTORY2 マクロを指定します。 次に例を示します。

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 (CComClassFactory2 へのテンプレート パラメーター) は、静的関数 VerifyLicenseKeyGetLicenseKeyIsLicenseValid を実装する必要があります。 簡単なライセンス クラスの例を次に示します。

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 は、CComClassFactory2Base とライセンスの両方から派生します。 さらに、CComClassFactory2BaseIClassFactory2 および CComObjectRootEx< CComGlobalsThreadModel > から派生します。

継承階層

CComObjectRootBase

license

CComObjectRootEx

IClassFactory2

CComClassFactory2

要件

ヘッダー: atlcom.h

CComClassFactory2::CreateInstance

指定した CLSID のオブジェクトを作成し、このオブジェクトへのインターフェイス ポインターを取得します。

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

パラメーター

pUnkOuter
[in] オブジェクトを集計の一部として作成中の場合、pUnkOuter は外部の不明な値である必要があります。 それ以外の場合、pUnkOuter は NULL である必要があります。

riid
[入力] 要求された インターフェイスの IID。 pUnkOuter が NULL 以外の場合、riidIID_IUnknown である必要があります。

ppvObj
[出力] riid によって識別されるインターフェイス ポインターへのポインター。 オブジェクトがこのインターフェイスをサポートしていない場合、ppvObj は NULL に設定されます。

戻り値

標準の HRESULT 値。

解説

マシンに完全にライセンスを付与する必要があります。 完全なマシン ライセンスが存在しない場合、CreateInstanceLic を呼び出します。

CComClassFactory2::CreateInstanceLic

CreateInstance と似ていますが、CreateInstanceLic はライセンス キーが必要な点が異なります。

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

パラメーター

pUnkOuter
[in] オブジェクトを集計の一部として作成中の場合、pUnkOuter は外部の不明な値である必要があります。 それ以外の場合、pUnkOuter は NULL である必要があります。

pUnkReserved
[in] 使用されません。 NULL にする必要があります

riid
[入力] 要求された インターフェイスの IID。 pUnkOuter が NULL 以外の場合、riidIID_IUnknown である必要があります。

bstrKey
[in] 以前に RequestLicKey を呼び出したときに取得したランタイム ライセンス キー。 このキーは、オブジェクトを作成するために必要です。

ppvObject
[out] riid で指定されたインターフェイス ポインターへのポインター。 オブジェクトでこのインターフェイスがサポートされていない場合、ppvObject は NULL に設定されます。

戻り値

標準の HRESULT 値。

解説

RequestLicKey を使ってライセンス キーを取得することができます。 ライセンスされていないマシン上でオブジェクトを作成するには、CreateInstanceLic を呼び出す必要があります。

CComClassFactory2::GetLicInfo

LICINFO 構造体に、クラス ファクトリのライセンス機能を説明する情報を入力します。

STDMETHOD(GetLicInfo)(LICINFO* pLicInfo);

パラメーター

pLicInfo
[out] LICINFO 構造体へのポインター。

戻り値

標準の HRESULT 値。

解説

この構造体の fRuntimeKeyAvail メンバーは、指定したライセンス キーで、クラス ファクトリがライセンスのないマシン上でのオブジェクトの作成を許可しているかどうかを示します。 fLicVerified メンバーは、完全なマシン ライセンスが存在するかどうかを示します。

CComClassFactory2::LockServer

_Module::Lock_Module::Unlock をそれぞれ呼び出すことで、モジュールのロック数をインクリメントおよびデクリメントします。

STDMETHOD(LockServer)(BOOL fLock);

パラメーター

fLock
[in] TRUE の場合、ロック数はインクリメントされます。それ以外の場合、ロック数はデクリメントされます。

戻り値

標準の HRESULT 値。

解説

_Module は、CComModule またはそれから派生したクラスのグローバル インスタンスを参照します。

LockServer を呼び出すことで、クライアントによるクラス ファクトリの保持が可能となり、複数のオブジェクトが迅速に作成されます。

CComClassFactory2::RequestLicKey

LICINFO 構造体の fRuntimeKeyAvail メンバーが TRUE である場合に、ライセンス キーを作成して返します。

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

パラメーター

dwReserved
[in] 使用されません。 ゼロを指定してください。

pbstrKey
[out] ライセンス キーへのポインター。

戻り値

標準の HRESULT 値。

解説

ライセンス キーは、CreateInstanceLic を呼び出してライセンスのないマシン上でオブジェクトを作成するために必要です。 fRuntimeKeyAvail が FALSE の場合、完全にライセンスされたマシン上でのみオブジェクトを作成することができます。

GetLicInfo を呼び出して fRuntimeKeyAvail の値を取得します。

関連項目

CComClassFactoryAutoThread クラス
CComClassFactorySingleton クラス
CComObjectRootEx クラス
CComGlobalsThreadModel
クラスの概要