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 関数を参照してください。
この例では m
行 n
列の構造体行列を入力として受け取り、以下のフィールドを含む新しい 1
行 1
列の構造体を返します。
テキスト入力による
m
行n
列の cell 配列の生成数値入力 (非複素数、スカラー値) により、たとえば
int
やdouble
など、入力と同じクラス ID をもつ数のm
行n
列のベクトルを生成。
この例をビルドするには、コマンド プロンプトで以下を入力します。
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]