MFC ActiveX コントロール : ActiveX コントロールの配布
この記事では、ActiveX コントロールの再配布に関連するいくつかの問題について説明します。
重要
ActiveX は、新しい開発には使用すべきではないレガシ テクノロジです。 ActiveX に取って代わる最新のテクノロジの詳細については、「ActiveX コントロール」を参照してください。
ANSI または Unicode のコントロールバージョン
ANSI バージョンのコントロールまたは Unicode バージョンのコントロール、あるいは両方を出荷するかどうかを決定する必要があります。 この決定は、ANSI および Unicode の文字セットに固有の移植性の要因に基づいて行います。
ANSI コントロールは、すべての Win32 オペレーティング システム上で動作し、さまざまな Win32 オペレーティング システムの間で最大の移植性を実現します。 Unicode コントロールは Windows NT (バージョン3.51 以降) でのみ動作し、Windows 95 または Windows 98 では動作しません。 移植性が重要な場合は、ANSI コントロールを出荷します。 コントロールが Windows NT でのみ実行される場合は、Unicode コントロールを出荷できます。 また、両方の配布を選択して、ユーザーのオペレーティング システムに最適なバージョンをアプリケーションでインストールすることもできます。
ActiveX コントロールと再頒布可能 DLL
ActiveX コントロールを使用して指定したセットアップ プログラムでは、Windows ディレクトリの特別なサブディレクトリを作成し、そこにコントロールの .OCX ファイルをインストールする必要があります。
Note
セットアップ プログラムで Windows GetWindowsDirectory API を使用して、Windows ディレクトリの名前を取得します。 会社または製品の名前からサブディレクトリ名を派生させることができます。
セットアップ プログラムは、必要な再頒布可能 DLL ファイルを Windows システム ディレクトリにインストールする必要があります。 ユーザーのコンピューターに DLL が既に存在する場合、セットアップ プログラムは、インストールしているバージョンとそれらのバージョンを比較する必要があります。 ファイルのバージョン番号が既にインストールされているファイルよりも大きい場合にのみ、そのファイルを再インストールします。
ActiveX コントロールは OLE コンテナー アプリケーションでのみ使用できるため、OLE DLL の完全なセットをコントロールと共に配布する必要はありません。 格納しているアプリケーション (またはオペレーティング システム自体) に標準の OLE DLL がインストールされているとします。
コントロールの登録
コントロールを使用するにはその前に、Windows 登録データベースに適切なエントリを作成する必要があります。 一部の ActiveX コントロール コンテナーには、ユーザーが新しいコントロールを登録するためのメニュー項目が用意されていますが、この機能はすべてのコンテナーで使用できるとは限りません。 そのため、インストール時に、セットアップ プログラムによってコントロールが登録されるようにすることができます。
必要に応じて、セットアッププログラムを記述して、代わりにコントロールを登録できます。
LoadLibrary Windows API を使用して、コントロール DLL を読み込みます。 次に、GetProcAddress を使用して、"DllRegisterServer" 関数のアドレスを取得します。 最後に、DllRegisterServer 関数を呼び出します。 次のコード サンプルでは考え得る 1 つのメソッドを示します。このサンプルでは、hLib がコントロール ライブラリのハンドルを格納し、lpDllEntryPoint が"DllRegisterServer" 関数のアドレスを格納します。
HINSTANCE hLib = LoadLibrary(pszDllName);
if (hLib < (HINSTANCE)HINSTANCE_ERROR)
{
AfxMessageBox(IDS_LOADLIBFAILED); //unable to load DLL
iReturn = FAIL_LOAD; //unable to load DLL
}
// Find the entry point.
lpDllEntryPoint = GetProcAddress(hLib, "DllRegisterServer");
if (lpDllEntryPoint != NULL)
(*lpDllEntryPoint)();
else
;// Unable to locate entry point
コントロールを直接登録する利点は、別のプロセスを起動して読み込む必要がなく (つまり、REGSVR32) インストール時間が短縮されることです。 また、登録は内部プロセスであるため、セットアップ プログラムでは、外部プロセスよりもエラーや予期しない状況を処理できます。
Note
セットアップ プログラムで ActiveX コントロールをインストールする前に、OleInitialize を呼び出す必要があります。 セットアップ プログラムが終了したら、OleUnitialize を呼び出します。 これにより、OLE システム DLL が ActiveX コントロールを登録するための適切な状態であることが保証されます。
MFCx0.DLL を登録する必要があります。