Main Content

Fortran MEX ファイルでのデータ フロー

データ入出力の表示

MEX ファイル myFunction に 2 つの入力引数と 1 つの出力引数が含まれているとします。MATLAB® 構文は [X] = myFunction(Y, Z) です。MATLAB から myFunction を呼び出すには、以下を入力します。

X = myFunction(Y, Z);

MATLAB インタープリターは、myFunction へのゲートウェイ ルーチン mexFunction を以下の引数で呼び出します。

Data input to 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 サイクル

Diagram shows how inputs enter a MEX file, what functions the gateway routine performs, and how outputs return to MATLAB.