MFC ActiveX コントロール : ActiveX コントロールのライセンス
ユーザーがコントロールを使用するか、配布できるユーザーを制御するためのサポートを、 ActiveX コントロール ライセンスして、割り当てのオプション機能。(ライセンスの問題の補足説明については、 既存の ActiveX コントロールのアップグレードライセンスの問題を参照してください)。
ここでは、次のトピックについて説明します。
ActiveX コントロールのライセンス処理の概要
ライセンス コントロールの作成
サポートのライセンス
ActiveX コントロールのライセンス処理のカスタマイズ
他のユーザーが ActiveX コントロールをどのように使用するかを判断するには、コントロールの開発者として、割り当てのライセンスを実行する ActiveX コントロール。購入者がコントロールを配布するコントロールを使用するアプリケーションのない .LIC ファイルいます。協定を使用してコントロールや .LIC ファイルをコントロールの購入者に。これは、コントロールを使用する書き込みのアプリケーションから最初に、からコントロールをライセンスせずにそのアプリケーションのユーザーにします。
ActiveX コントロールのライセンス処理の概要
サポートを ActiveX コントロールにライセンス処理を提供するには、 COleObjectFactory のクラスは IClassFactory2 インターフェイスの複数の関数に実装を提供します: IClassFactory2::RequestLicKey、 IClassFactory2::GetLicInfoと IClassFactory2::CreateInstanceLic。コンテナー アプリケーションの開発者がコントロールのインスタンスを作成する要求を行うと、コントロール .LIC ファイルがあることを確認するに GetLicInfo への呼び出しが行われました。コントロールが稼働すると、コントロールのインスタンスは、コンテナーに作成し、配置できます。開発者がコンテナー アプリケーションを構築することを完了した後、別の関数呼び出し、 RequestLicKeyに今回は、行われます。このコンテナー アプリケーションに関数の戻り値ライセンス キー (単純な文字列)。Enter キーは、アプリケーション内に埋め込まれます。
下の図に、コンテナー アプリケーションの開発時に使用する ActiveX コントロールのライセンスの検証を示します。前に述べたように、コンテナー アプリケーションの開発者は、コントロールのインスタンスを作成できるように開発用コンピューターにインストールされる適切な .LIC ファイルが必要です。
開発時の ActiveX コントロールのライセンス検査
次の図では、次のプロセスは、エンド ユーザーがコンテナー アプリケーションを実行すると発生します。
アプリケーションの起動時には、作成される通常のコントロールに必要なインスタンス。コンテナーは、パラメーターとしての埋め込みライセンス キーを渡す CreateInstanceLicに呼び出しの作成により実現します。文字列比較は、ライセンス キーの埋め込みライセンス キーとコントロールの独自のコピー中に表示されます。一致に成功すると、コントロールのインスタンスが作成され、アプリケーションは正常に実行されます。.LIC ファイルをコントロールのユーザーのコンピューター上にある必要はないことに注意してください。
実行時の ActiveX コントロールのライセンス検査
コントロールのライセンスは 2 種類の基本的なコンポーネントから構成されます: コントロールの実装の特定の DLL コードとライセンスです。コードは二つ (2 または 3)関数呼び出しと以後参照される文字列で、著作権表記を含む 「ライセンス文字列」構成されます。これらの呼び出しとライセンスの文字列は、コントロールの実装 (.cpp)ファイルにあります。ActiveX コントロール ウィザードが生成するライセンス ファイルは著作権ステートメントのテキスト ファイルです。これは、 .LIC の拡張、たとえば SAMPLE.LIC のプロジェクト名を使用して指定されます。ライセンス コントロールは、ライセンス ファイルとともにデザイン時の使用が必要な場合されます。
ライセンス コントロールの作成
コントロールのフレームワークを作成するには、 ActiveX コントロール ウィザードを使用すると、サポートのライセンスを含むことができます。コントロールは、ランタイム ライセンスが必要であることを指定すると ActiveX コントロール ウィザードはコントロール クラスにライセンスをサポートするコードを追加します。コードは、関数からその使用ライセンスの検証のキーとライセンス ファイル構成されます。これらの関数は、コントロールのライセンスをカスタマイズするために変更できます。ライセンスのカスタマイズの詳細については、この技術情報の ActiveX コントロールのライセンス処理のカスタマイズ を参照してください。
コントロール プロジェクトを作成するときに ActiveX コントロール ウィザードでライセンス処理のサポートを追加するには
- MFC ActiveX コントロールの作成でプロセスを使用します。ActiveX コントロール ウィザードの アプリケーションの構成 のページは、ランタイム ライセンスとコントロールを作成するオプションが含まれています。
ActiveX コントロール ウィザードでは、基本的なライセンス サポートを含む ActiveX コントロールのフレームワークを生成します。ライセンス コードの詳細については、次のトピックを参照してください。
サポートのライセンス
サポートを ActiveX コントロールにライセンス処理を追加するには、 ActiveX コントロール ウィザードを使用すると、 ActiveX コントロール ウィザードを宣言する実装は、コントロールのヘッダーと実装ファイルにライセンス機能追加されますコードを追加します。このコードは COleObjectFactory にある既定の実装をオーバーライドする VerifyUserLicense のメンバー関数と GetLicenseKey のメンバー関数で構成されます。これらの関数は、コントロールのライセンスを取得し、検証します。
[!メモ]
3 番目のメンバー関数は、 VerifyLicenseKey ActiveX コントロール ウィザードによって生成されていないか、ライセンス キーの検証の動作をカスタマイズするためにオーバーライドできます。
これらのメンバー関数は次のとおりです:
-
コントロールのライセンス ファイルの有無システムのチェックして、コントロールの割り当てのデザイン時の使用を確認します。この関数は IClassFactory2::GetLicInfo と IClassFactory::CreateInstanceLic処理の一部として、フレームワークによって呼び出されます。
-
コントロールの DLL からの一意キーを要求します。コンテナー アプリケーションでこのキーが埋め込まれ、 VerifyLicenseKeyとともに、コントロールのインスタンスを作成するために後で使用されます。この関数は IClassFactory2::RequestLicKey処理の一部として、フレームワークによって呼び出されます。
-
埋め込みキー、一意キーが同じであることを確認します。これは、コンテナーが使用するコントロールのインスタンスを作成できます。この関数は IClassFactory2::CreateInstanceLic 処理の一部として、フレームワークによって呼び出され、ライセンス キーのカスタマイズされた検証を提供するためにオーバーライドできます。既定の実装は、文字列比較を実行します。詳細については、この技術情報の ActiveX コントロールのライセンス処理のカスタマイズを、後の " " を参照してください。
ヘッダー ファイルの変更
ActiveX コントロール ウィザードは、コントロールのヘッダー ファイルに次のコードを配置します。この例では、 entity_CODECSampleCtrl のオブジェクト factory の 2 種類のメンバー関数は、コントロール .LIC ファイルがあるかどうかを確認するとコントロールを含むアプリケーションで使用されるライセンス キーを取得すると宣言します: 1
BEGIN_OLEFACTORY(CMyAxUICtrl) // Class factory and guid
virtual BOOL VerifyUserLicense();
virtual BOOL GetLicenseKey(DWORD, BSTR FAR*);
END_OLEFACTORY(CMyAxUICtrl)
実装ファイルの変更
ActiveX コントロール ウィザードは、コントロールの実装ファイルにライセンス ファイル名とライセンスの文字列を宣言する次の 2 種類のステートメントを配置します:
static const TCHAR BASED_CODE _szLicFileName[] = _T("NVC_MFC_AxUI.lic");
static const WCHAR BASED_CODE _szLicString[] = L"Copyright (c) 2006 ";
[!メモ]
何か szLicString を変更すると、コントロール .LIC ファイルの最初の行を変更できます。ライセンスは正しく機能しません。
ActiveX コントロール ウィザードは、コントロールの実装ファイルにコントロール クラスの VerifyUserLicense と GetLicenseKey 関数を定義する次のコードを配置します:
// CMyAxUICtrl::CMyAxUICtrlFactory::VerifyUserLicense -
// Checks for existence of a user license
BOOL CMyAxUICtrl::CMyAxUICtrlFactory::VerifyUserLicense()
{
return AfxVerifyLicFile(AfxGetInstanceHandle(), _szLicFileName, _szLicString);
}
// CMyAxUICtrl::CMyAxUICtrlFactory::GetLicenseKey -
// Returns a runtime licensing key
BOOL CMyAxUICtrl::CMyAxUICtrlFactory::GetLicenseKey(DWORD /*dwReserved*/,
BSTR FAR* pbstrKey)
{
if (pbstrKey == NULL)
return FALSE;
*pbstrKey = SysAllocString(_szLicString);
return (*pbstrKey != NULL);
}
最後に、 ActiveX Control Wizard は、コントロール プロジェクト .IDL ファイルを変更します。licensed のキーワードは、次の例のように、コントロールのコクラスの宣言に追加されます:
[ uuid(913E450B-E720-4C71-BCDF-71C96EE98FEB), licensed,
helpstring("MyAxUI Control"), control ]
coclass NVC_MFC_AxUI
ActiveX コントロールのライセンス処理のカスタマイズ
VerifyUserLicense、 GetLicenseKeyと VerifyLicenseKey がコントロールのファクトリ クラスの仮想メンバー関数として宣言されているため、コントロールのライセンス動作をカスタマイズできます。
たとえば、コントロールに VerifyUserLicense または VerifyLicenseKey のメンバー関数をオーバーライドすることによって、ライセンス処理の複数のレベルを提供できます。この関数の中でプロパティまたはメソッドが、見つかったライセンスのレベルに応じてユーザーに公開する方法を調整できます。
ユーザーに通知するためにカスタマイズされたメソッドを使用する VerifyLicenseKey 関数にコードを追加できます。作成が失敗した制御できます。たとえば、 VerifyLicenseKey のメンバー関数でコントロールが初期化されていない理由ことを示すメッセージ ボックスを表示する場合があります。
[!メモ]
ActiveX コントロールのライセンスの検証をカスタマイズするもう一つの方法は AfxVerifyLicFileを呼び出す代わりに、特定のレジストリ キーの登録情報データベースをチェックすることです。既定の実装の例については、この技術情報の 実装ファイルの変更 " を参照してください。
ライセンスの問題の追加手順については、 既存の ActiveX コントロールのアップグレードライセンスの問題を参照してください。