Main Content

Fortran MEX ファイルのコンポーネント

mexFunction ゲートウェイ ルーチン

"ゲートウェイ ルーチン" は、MEX ファイルへのエントリ ポイントです。MATLAB® が MEX ファイルの残りのルーチンにアクセスするとき、このルーチンが使用されます。ゲートウェイ ルーチンの名前は mexFunction です。これにより、ソース コードのメイン プログラムが置き換えられます。

MEX ファイルの命名

mexFunction を含むソース ファイルの名前が MEX 関数の名前、つまり MATLAB で呼び出す関数の名前になります。Fortran ソース ファイルの名前には、大文字の .F のファイル拡張子を使用します。

バイナリ MEX ファイルのファイル拡張子は、プラットフォームに依存します。ファイル拡張子は、関数 mexext で現在のマシンの値を取得することで確認できます。

.f ファイルと .F ファイルの違い

Fortran MEX ファイルがプラットフォームに依存しないようにするには、ファイルの拡張子として大文字の .F を使用します。

Fortran コンパイラは、小文字の .f のファイル拡張子をもつソース ファイルの場合、前処理が完了していると見なします。ほとんどのプラットフォームでは、関数 mex を実行すると、ファイル拡張子に関係なく必ずファイルが前処理されます。ただし、Apple Macintosh プラットフォームでは、mex を実行しても前処理が行われません。

必須パラメーター

Fortran の関数 mexfunction のシグネチャは以下のとおりです。

      subroutine mexFunction(nlhs, plhs, nrhs, prhs)
      integer nlhs, nrhs
      mwpointer plhs(*), prhs(*)

このサブルーチンは、ソース ファイル内の計算ルーチンやその他のサブルーチンの後に配置します。

次の表では、mexFunction のパラメーターについて説明します。

パラメーター説明
prhs右辺入力引数の配列。
plhs左辺出力引数の配列。
nrhs右辺引数の数、つまり配列 prhs のサイズ。
nlhs左辺引数の数、つまり配列 plhs のサイズ。

prhs および plhsmwPointer 型として宣言します。つまり、これは MATLAB 配列を指します。これらは MEX ファイルの引数へのポインターを含むベクトルです。

名前 prhs は "parameters, right-hand side (パラメーター、右辺)" を表していると解釈でき、入力パラメーターであることがわかります。同様に、plhs は "parameters, left side (パラメーター、左辺)" を表しており、出力パラメーターであることがわかります。

入出力パラメーターの管理

入力パラメーター (配列 prhs にある) は読み取り専用です。MEX ファイルで変更しないようにしてください。入力パラメーター内のデータを変更すると、好ましくない副次作用が生じることがあります。

出力データや MEX ファイルでローカルに使用する任意のデータを作成するために入力パラメーターを使用する際も、注意が必要です。入力配列を出力配列 (たとえば、plhs(1)) にコピーする場合、関数 mxDuplicateArray を呼び出して入力配列のコピーを作成します。以下に例を示します。

plhs(1) = mxDuplicateArray(prhs(1)) 

詳細は、トラブルシューティングのトピックセルまたは構造体 mxArray の不適切な作成を参照してください。

入力の検証

サブルーチンの入力を検証する関数の一覧は、行列ライブラリのカテゴリFortran データの検証を参照してください。関数 mxIsClassmxArray のテストにおいて汎用的に働きます。

計算ルーチン

"計算ルーチン" には、バイナリ MEX ファイルへの実装が望まれる計算を実行するためのコードが含まれています。必須ではありませんが、ゲートウェイ ルーチン mexFunction を記述して計算ルーチンを呼び出すことを検討してください。入力パラメーターを検証してそれらを計算ルーチンで必要な型に変換するには、mexFunction コードをラッパーとして使用します。

ゲートウェイ ルーチンと計算ルーチンを別々に記述する場合、1 つのソース ファイルにまとめることも別々のファイルにすることもできます。別々のファイルを使用する場合、mexFunction を含むファイルは mex コマンドでリストされる最初のソース ファイルでなければなりません。

参考

| | | |