DLL でのダイアログ・コントロールの使用

DLL 中で定義されているダイアログボックスを使用することができます。これを行うには,ダイアログ・リソースが主アプリケーションではなく DLL にあることをダイアログ関数に通知しなければなりません。ダイアログ関数は,基本設定では,主アプリケーション中のダイアログ・リソースを検索します。

これを行うには,DlgInit ではなく DlgInitWithResourceHandle を使ってダイアログボックスを初期化します。DlgInit と比較すると,DlgInitWithResourceHandle"hinst" という名前の付加的な引数を取ります。"hinst" 引数は,ダイアログ・リソースを見つけることができるモジュール・インスタンス・ハンドルです。DLL に対して,このハンドルは DLL エントリ・ポイント DllMain に渡されます。

DllMain 関数の例を以下に示します。

	module dll_globals
	  integer(4) ghInst	! DLL instance handle
	end module dll_globals

!********************************************************************
!*   FUNCTION: DllMain(HANDLE, DWORD, LPVOID)
!*
!*   PURPOSE:  DllMain is called by Windows when
!*     the DLL is initialized, Thread Attached, and other times.
!*     Refer to SDK documentation, as to the different ways this
!*     may be called.
!*
!*     The DllMain function should perform additional initialization
!*     tasks required by the DLL.  DllMain should return a value of 1
!*     if the initialization is successful.
!*
!*********************************************************************

	integer(4) function DllMain (hInst, ul_reason_being_called, lpReserved)
!DEC$ IF DEFINED(_M_X86_)
!DEC$ ATTRIBUTES STDCALL, ALIAS : '_DllMain@12' :: DllMain
!DEC$ ELSE
!DEC$ ATTRIBUTES STDCALL, ALIAS : 'DllMain' :: DllMain
!DEC$ ENDIF
use dll_globals
integer(4) hInst integer(4) ul_reason_being_called integer(4) lpReserved
! Save the module instance handle in a global variable ! This would typically be in a Module or a COMMON block. ghInst = hInst
DllMain = 1 return end

DlgInitWithResourceHandle を使う 1 つの方法は,リソースのみの DLL を作成することです。リソースのみの DLL は .RC ファイルを含んでいますが,コードがありません。複数の言語をサポートするアプリケーションをビルドする場合,この方法は有用です。主アプリケーションとさまざまなリソースのみの DLL (各言語毎の) を作成し,適切なリソースのみの DLL をロードするためにアプリケーションの始めに Win32 LoadLibrary ルーチンを呼び出します。リソースのみの DLL からダイアログボックスを使用するためには,まず,DlgInitWithResourceHandle を呼び出す時に使用することができるインスタンス・ハンドルを返す LoadLibrary (HTMLHelp Viewer で,「Platform SDK」を参照してください) を呼び出します。

Fortran DLL プロジェクトを作成する時,Fortran Dynamic Link Library AppWizard を使ってリソースなしの DLL を作成することができます。

  1. Fortran Dynamic Link Library AppWizard で「An empty DLL application」を選択します。

  2. プロジェクトの作成を完了します。

  3. 「Project」メニューから「Add to Project」,「Files...」を選択します。表示されるダイアログボックスで,自分の .RC ファイルとコントロールの識別子を定義する RESOURCE.H ファイルを追加します。

  4. 「Project」メニューで以下を行います。