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
へのテンプレート パラメーター) は、静的関数 VerifyLicenseKey
、GetLicenseKey
、IsLicenseValid
を実装する必要があります。 簡単なライセンス クラスの例を次に示します。
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
とライセンスの両方から派生します。 さらに、CComClassFactory2Base
は IClassFactory2
および CComObjectRootEx< CComGlobalsThreadModel >
から派生します。
継承階層
CComObjectRootBase
license
IClassFactory2
CComClassFactory2
要件
ヘッダー: atlcom.h
CComClassFactory2::CreateInstance
指定した CLSID のオブジェクトを作成し、このオブジェクトへのインターフェイス ポインターを取得します。
STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void** ppvObj);
パラメーター
pUnkOuter
[in] オブジェクトを集計の一部として作成中の場合、pUnkOuter は外部の不明な値である必要があります。 それ以外の場合、pUnkOuter は NULL である必要があります。
riid
[入力] 要求された インターフェイスの IID。 pUnkOuter が NULL 以外の場合、riid は IID_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 以外の場合、riid は IID_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
クラスの概要