Main Content

C MEX ファイルでの構造体と cell 配列の受け渡し

構造体と cell 配列の MEX ファイルへの受け渡しは、C 行列 API のデータ自体が mxArray 型であること以外、他のデータ型を渡す場合と同様です。実際には、mxGetField (構造体の場合) と mxGetCell (cell 配列の場合) は mxArray 型のポインターを返します。これらのポインターは、他の mxArray 型のポインターと同様に扱います。mxArray に含まれるデータを C ルーチンに渡すには、mxGetData などの API 関数を使用してそのデータにアクセスします。

この MEX ファイル例では C 行列 API を使用します。C++ 用の MATLAB データ APIを使用する C++ MEX ファイルの例については、phonebook.cpp を参照してください。この API での MEX ファイル作成の詳細については、C++ MEX 関数を参照してください。

この例では mn 列の構造体行列を入力として受け取り、以下のフィールドを含む新しい 11 列の構造体を返します。

  • テキスト入力による mn 列の cell 配列の生成

  • 数値入力 (非複素数、スカラー値) により、たとえば intdouble など、入力と同じクラス ID をもつ数の mn 列のベクトルを生成。

この例をビルドするには、コマンド プロンプトで以下を入力します。

mex phonebook.c

このプログラムがどのように動作するかを見るには、以下の構造体を作成します。

friends(1).name = 'Jordan Robert';
friends(1).phone = 3386;
friends(2).name = 'Mary Smith';
friends(2).phone = 3912;
friends(3).name = 'Stacy Flora';
friends(3).phone = 3238;
friends(4).name = 'Harry Alpert';
friends(4).phone = 3077;

MEX ファイルを呼び出します。

phonebook(friends)
ans = 
     name: {1x4 cell  }
    phone: [3386 3912 3238 3077]

関連するトピック