ダイナミック・リンク・ライブラリー (DLL) は,それらを使用するアプリケーションとは別にコンパイル,リンク,格納された 1 つまたは複数のサブプログラムを含んでいます。
コーディング要件には,cDEC$ ATTRIBUTES DLLIMPORT および DLLEXPORT コンパイラ指示文を使用することが含まれます。主プログラムと DLL 中で宣言された変数とルーチンは,DLLIMPORT と DLLEXPORT を使用しない限り,互いには見えません。
この節では,Fortran DLL 中の副プログラム手続 (関数とサブルーチン) の共有に関して説明します。
個々の DLL 副プログラムのエクスポートとインポートを行う方法
SUBROUTINE ARRAYTEST(arr) !DEC$ ATTRIBUTES DLLEXPORT :: ARRAYTEST REAL(4) arr(3, 7) INTEGER i, j DO i = 1, 3 DO j = 1, 7 arr (i, j) = 11.0 * i + j END DO END DO END SUBROUTINE
INTERFACE SUBROUTINE ARRAYTEST (rarray) !DEC$ ATTRIBUTES DLLIMPORT :: ARRAYTEST REAL rarray(3, 7) END SUBROUTINE ARRAYTEST END INTERFACE
DLLEXPORT および DLLIMPORT オプション (cDEC$ ATTRIBUTES コンパイラ指示文) は DLL のインタフェースを定義します。
DLLEXPORT プロパティは,関数またはデータが他の実行形式ファイルまたは DLL にエクスポートされることを宣言し,通常は,DLLEXPORT で宣言された関数またはサブルーチンのシンボルを,リンカー・モジュール定義 (.DEF) ファイルなしでもエクスポートできるようにします。DLLEXPORT プロパティを持つ関数,サブルーチン,またはデータを宣言するときには,同じプログラムの同じモジュール中で定義が行われている必要があります。
別の実行形式ファイル (.DLL など) に定義されているシンボルを使用するプログラムは,それらのシンボルをインポートしなくてはなりません。DLL ユーザーは,別実行形式ファイルのインポート .LIB ファイルとリンクして,シンボルをインポートするアプリケーション中で DLLIMPORT オプションを使用する必要があります。DLLIMPORT オプションは定義ではなく宣言中で使用します。これは,インポートするシンボルについては定義は行わないからです。
「ダイナミック・リンク・ライブラリーのビルドと使用」の説明に従って,DLL をビルドし,次に主プログラムをビルドします。
Fortran アプリケーションと C アプリケーションは,呼び出し規約に一貫性がある限り,Fortran と C の DLL を呼び出すことができます (「言語が混在したプログラミング」の「Visual Fortran と Visual C++ が混在したプログラミング」を参照)。
Visual Basic アプリケーションも,DLL の形になっている Fortran の関数とサブルーチンを呼び出すことができます (「言語が混在したプログラミング」の「Visual Basic からの Visual Fortran の呼び出し」を参照)。
関連情報
DLL のビルドの方法については,「ダイナミック・リンク・ライブラリーのビルドと使用」を参照してください。
DLL 中の共通ブロックまたはモジュール・データの共有については,「DLL 中のデータを共有するためのコーディング要件」を参照してください。
サンプル・プログラムを使って副プログラムのインポートとエクスポートを行う方法については,...\DF98\SAMPLES\ADVANCED\WIN32 フォルダにある Visual Fortran サンプルの TLS を参照してください。