この記事では、ActiveX コントロールの再配布に関連するいくつかの問題について説明します。
Von Bedeutung
ActiveX は、新しい開発には使用すべきではないレガシ テクノロジです。 ActiveX に代わる最新のテクノロジの詳細については、「 ActiveX コントロール」を参照してください。
ANSI または Unicode コントロールのバージョン
ANSI バージョンまたは Unicode バージョンのコントロール、またはその両方を出荷するかどうかを決定する必要があります。 この決定は、ANSI および Unicode 文字セットに固有の移植性の要因に基づいています。
すべての Win32 オペレーティング システムで動作する ANSI コントロールを使用すると、さまざまな Win32 オペレーティング システム間の移植性を最大限に高めます。 Unicode コントロールは Windows NT (バージョン 3.51 以降) でのみ機能しますが、Windows 95 または Windows 98 では機能しません。 移植性が主な懸念事項である場合は、ANSI コントロールを出荷します。 コントロールが Windows NT でのみ実行される場合は、Unicode コントロールを配布できます。 また、両方を出荷し、アプリケーションにユーザーのオペレーティング システムに最も適したバージョンをインストールすることもできます。
ActiveX コントロールと再頒布可能 DLL のインストール
ActiveX コントロールに提供するセットアップ プログラムでは、Windows ディレクトリの特別なサブディレクトリを作成し、コントロールをインストールする必要があります。その中の OCX ファイル。
注
セットアップ プログラムで Windows GetWindowsDirectory
API を使用して、Windows ディレクトリの名前を取得します。 会社または製品の名前からサブディレクトリ名を派生させる場合があります。
セットアップ プログラムは、必要な再頒布可能 DLL ファイルを Windows システム ディレクトリにインストールする必要があります。 いずれかの DLL がユーザーのコンピューターに既に存在する場合、セットアップ プログラムは、インストールしているバージョンとそれらのバージョンを比較する必要があります。 バージョン番号が既にインストールされているファイルより大きい場合にのみ、ファイルを再インストールします。
ActiveX コントロールは OLE コンテナー アプリケーションでのみ使用できるため、OLE DLL の完全なセットをコントロールに配布する必要はありません。 含まれているアプリケーション (またはオペレーティング システム自体) に標準の OLE DLL がインストールされていると仮定できます。
コントロールの登録
コントロールを使用する前に、Windows 登録データベースに適切なエントリを作成する必要があります。 一部の ActiveX コントロール コンテナーには、ユーザーが新しいコントロールを登録するためのメニュー項目が用意されていますが、この機能はすべてのコンテナーで使用できない場合があります。 そのため、セットアップ プログラムでコントロールのインストール時に登録することが必要になる場合があります。
必要に応じて、代わりにコントロールを直接登録するセットアップ プログラムを記述できます。
LoadLibrary
Windows API を使用して、コントロール DLL を読み込みます。 次に、 GetProcAddress
を使用して、"DllRegisterServer" 関数のアドレスを取得します。 最後に、 DllRegisterServer
関数を呼び出します。 次のコード サンプルは、 hLib
コントロール ライブラリのハンドルを格納し、 lpDllEntryPoint
が "DllRegisterServer" 関数のアドレスを格納する、考えられる 1 つのメソッドを示しています。
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) を呼び出して読み込む必要がなくなり、インストール時間が短縮される点です。 さらに、登録は内部プロセスであるため、セットアップ プログラムは、エラーや予期しない状況を外部プロセスよりも適切に処理できます。
注
セットアップ プログラムが ActiveX コントロールをインストールする前に、 OleInitialize
を呼び出す必要があります。 セットアップ プログラムが完了したら、 OleUnitialize
を呼び出します。 これにより、OLE システム DLL が ActiveX コントロールを登録するための適切な状態になります。
MFCx0.DLLを登録する必要があります。