Share via


MFC ActiveX コントロール : ActiveX コントロールの配布

ここでは、ActiveX コントロールの再頒布に関する次のようなトピックについて説明します。

  • ANSI バージョンと Unicode バージョンのコントロール

  • ActiveX コントロールと再頒布できる DLL のインストール

  • コントロールの登録

    注意

    ActiveX コントロールの再頒布に関する追加情報については、「コントロールを再頒布する」を参照してください。

ANSI バージョンと Unicode バージョンのコントロール

ANSI バージョンと Unicode バージョンのどちら (または両方) のコントロールを用意するのかを決定する必要があります。 決定の基準となるのは、ANSI 文字セットと Unicode 文字セットの移植性に関する特性です。

ANSI コントロールは、すべての Win32 オペレーティング システムで動作するため、さまざまな Win32 オペレーティング システム間で最大限の移植性が保証されます。 これに対して、Unicode コントロールが動作するのは Windows NT (Version 3.51 以降) だけであり、Windows 95 や Windows 98 では動作しません。 移植性が重視される場合は、ANSI コントロールにすることをお勧めします。 Windows NT 専用のコントロールについては、Unicode コントロールでもかまいません。 また、両方のバージョンを用意して、ユーザーのオペレーティング システムに適した方がインストールされるようにすることもできます。

ActiveX コントロールと再頒布できる DLL のインストール

ActiveX コントロールと一緒に提供するセットアップ プログラムは、Windows フォルダーの下に専用のサブフォルダーを作成し、そこにコントロールの .OCX ファイルをインストールするように動作させる必要があります。

注意

セットアップ プログラムで Windows フォルダーの名前を取得するには、Windows API の GetWindowsDirectory を使用します。 サブフォルダーには、会社や製品の名前を付けることができます。

セットアップ プログラムでは、再頒布できる DLL ファイルのうち必要なものを Windows のシステム フォルダーにインストールします。 インストールしようとしている DLL ファイルがユーザーのコンピューターに既に存在する場合は、ファイルのバージョンがセットアップ プログラムによって比較されます。 既存のファイルのバージョンが古い場合にだけ、ファイルがインストールされます。

ActiveX コントロールを使用できるのは OLE コンテナー アプリケーションだけなので、すべての OLE DLL をコントロールと一緒に配布する必要はありません。 通常は、コンテナー アプリケーションまたはオペレーティング システムに標準の OLE DLL がインストールされています。

コントロールの登録

コントロールを使用する前に、Windows レジストリ データベースに適切なエントリを作成する必要があります。 ActiveX コントロール コンテナーに、ユーザーが新しいコントロールを登録するためのメニュー項目が用意されている場合もありますが、すべてのコンテナーにこのような登録機能が備わっているわけではありません。 したがって、インストール時にセットアップ プログラムでコントロールを登録することをお勧めします。

このほか、コントロールを直接登録するセットアップ プログラムを自分で記述することもできます。

まず、Windows API の LoadLibrary を使ってコントロールの DLL を読み込みます。 次に、GetProcAddress を使って "DllRegisterServer" 関数のアドレスを取得します。 最後に、DllRegisterServer 関数を呼び出します。 次のコードは、コントロールを直接登録する方法の一例です。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) を呼び出したり読み込んだりする必要がないため、インストール時間を短縮できます。 また、セットアップ プログラムでは、登録が内部プロセスになるため、外部プロセスの場合よりもエラーや予想外の状況を柔軟に処理できるようになります。

注意

セットアップ プログラムでは、ActiveX コントロールをインストールする前に OleInitialize を呼び出す必要があります。 また、セットアップ プログラムの終了時には、OleUnitialize を呼び出します。 これにより、OLE システム DLL が、ActiveX コントロールを登録できる状態になります。

さらに、MFCx0.DLL を登録する必要があります。

参照

概念

MFC ActiveX コントロール