Fortran Builder は、実行形式(.exe)以外にも、ダイナミックリンクライブラリ(.dll)やスタティックライブラリ(.a)の作成が行えます。特に DLL は、様々な環境から使える強力な仕組みであるため、Fortran で書いた計算ルーチンを Excel や Python などの他の環境から使うことが可能です。
ここでは、Fortran Builder を用いて DLL ファイルを作成し、Excel から呼び出す例を示します。
- ① DLL プロジェクトを作成する
- ② プロジェクトにソースファイルを追加する
- ③ ソースファイルにプログラム(計算ルーチン)を書く
- ※ プロジェクトを 32-bit モードに変更する(32-bit Excel でご利用の場合)
- ④ プロジェクトをビルドする(DLL ファイルを生成する)
- ※ プロジェクトフォルダーを開く
- ⑤ DLL を Excel から呼び出す
① DLL プロジェクトを作成する
メニューから「ファイル > 新規作成 > プロジェクト」を選択してください。
以下のような画面が表示されますので、「プロジェクトの種類」から「ダイナミックリンクライブラリ」を選択後に、「プロジェクトの名前」を myflib として「次へ」ボタンを押してください。
以下のような画面が表示されますが、このまま「OK」ボタンを押して次に進んでください。
以下のような画面が表示されれば、DLL プロジェクトの作成は無事行われています。
次のステップに進んでください。
② プロジェクトにソースファイルを追加する
メニューから「ファイル > 新規作成 > ファイル」を選択してください。
以下のような画面が表示されますので、「Fortran 自由形式ソースファイル」を選択後に「OK」ボタンを押してください。
以下のような画面が表示されますので、「ファイル名」を myprog として「OK」ボタンを押してください。
以下のような画面が表示されれば、ソースファイルの作成は無事行われています。
次のステップに進んでください。
③ ソースファイルにプログラム(計算ルーチン)を書く
以下のソースプログラムを入力してください。
倍精度実数 a と b を引数にとり、a + b を倍精度実数として返す関数です。
function myfunc(a, b) double precision, intent(in) :: a, b double precision myfunc myfunc = a + b end function
入力が終わったら、メニューから「ファイル > 上書き保存」(または Ctrl + S)を選択してください。
※ プロジェクトを 32-bit モードに変更する(32-bit Excel でご利用の場合)
32-bit Excel でご利用の場合は、DLL も 32-bit である必要があります。
(なお、64-bit Excel でご利用の場合は、DLL も 64-bit である必要があります。)
32-bit DLL を作成する場合は、プロジェクトのビットモードが 32-bit になっている必要があります。
(なお、64-bit DLL を作成する場合は、プロジェクトのビットモードが 64-bit になっている必要があります。)
メニューから「プロジェクト > プロジェクトの設定」を開いてください。
「基本設定」の「ビットモード」を 32-bit に設定して「OK」ボタンを押してください。
※ この時、「DLL 互換(-compatible)」オプションにチェックが入っていない場合は、チェックを入れてください。
④ プロジェクトをビルドする(DLL ファイルを生成する)
メニューから「プロジェクト > ビルド」を選択してください。
問題が無ければ、メッセージウィンドウに以下のように表示され、プロジェクトフォルダーに DLL ファイルが作成されます。
※ プロジェクトフォルダーを開く
メニュー「表示 > プロジェクトフォルダー」から、プロジェクトフォルダーを直接開くことができます。
フォルダーの中に、DLL ファイル(myflib.dll)が作成されていることが分かります。
⑤ DLL を Excel から呼び出す
Excel 起動してください。
Alt + F11 を押して(Alt キーを押しながら F11 を押す)Visual Basic エディタを開いてください。
メニューから「挿入 > 標準モジュール」を選択してください。
ここで利用する関数(myflib.dll 内の MYFUNC)の宣言を行います。myflib.dll の指定はフルパスで行ってください。
以下にコード例を示しますが、DLL ファイルのパスはユーザー環境に合わせて適宜書き換えてください。
Private Declare PtrSafe Function MYFUNC _ Lib "C:\Users\Username\Documents\FBuilder\prjs\myflib\myflib.dll" _ (ByRef A As Double, ByRef B As Double) As Double Function myfunction(ByRef X As Double, ByRef Y As Double) As Double myfunction = MYFUNC(X, Y) End Function
Excel シートに戻り、一つのセルを選択した状態で「数式 > 関数の挿入」を選択してください。
以下のように「関数の挿入」ウィンドウが表示されますので、「関数の分類」を「ユーザー定義」にし、myfunction を選択して「OK」ボタンを押してください。
以下のように「関数の引数」ウィンドウが表示されますので、数値を直接入力するか、もしくはセルを指定してください。
ここでは、X に 1.1、Y に 2.2 を直接入力しています。
問題がなければ、始めに選択したセルに、答え 3.3 が得られます。