Fortran MEX ファイルでのデータ フロー
データ入出力の表示
MEX ファイル myFunction
に 2 つの入力引数と 1 つの出力引数が含まれているとします。MATLAB® 構文は [X] = myFunction(Y, Z)
です。MATLAB から myFunction
を呼び出すには、以下を入力します。
X = myFunction(Y, Z);
MATLAB インタープリターは、myFunction
へのゲートウェイ ルーチン mexFunction
を以下の引数で呼び出します。
入力は prhs
で、2 要素の配列 (nrhs = 2
) です。最初の要素は Y
という mxArray
へのポインターで、2 番目の要素は Z
という mxArray
へのポインターです。
出力は plhs
で、1 要素の配列 (nlhs = 1
) です。ここで、この単一の要素は null
ポインターになります。出力 X
はサブルーチンが実行されるまで作成されないので、パラメーター plhs
は何も指しません。
ゲートウェイ ルーチンが出力配列を作成し、配列へのポインターを plhs[0]
に設定します。このルーチンが plhs[0]
に値を割り当てず、関数の呼び出し時に手動で関数に出力値を割り当てた場合、MATLAB はエラーを生成します。
メモ
nlhs = 0
であっても出力値を返すことは可能です。これは、結果を変数 ans
に返すことに相当します。
ゲートウェイ ルーチンのデータ フロー ダイアグラム
この MEX サイクル ダイアグラムは、入力がどのように MEX ファイルに入るか、ゲートウェイ ルーチンがどの関数を実行するか、出力がどのように MATLAB に返されるかを説明します。
この例では、MEX ファイル func
の構文は [C, D] = func(A,B)
です。この図では、func
が呼び出されると、MATLAB は変数 A
および B
を MEX ファイルに渡します。C
および D
は割り当てられません。
ゲートウェイ ルーチンは関数 mxCreate*
を使用して、出力引数用に MATLAB 配列を作成します。plhs[0]
と plhs[1]
を新しく作成された MATLAB 配列へのポインターに設定します。関数 mxGet*
により、引数 prhs[0]
および prhs[1]
からデータが抽出されます。最後に、計算ルーチンが呼び出され、入力データおよび出力データのポインターが関数パラメーターとして渡されます。
MATLAB は、plhs[0]
を C
に、plhs[1]
を D
に割り当てます。
Fortran MEX サイクル