MATLAB: C-MEX S-Function​パラメータにワークス​ペースの配列を渡す方​法について

c - mexmxarraymxgetprs-functions-function arrays-functionパラメータsimulinkポインタ日本語

https://jp.mathworks.com/matlabcentral/answers/92454-c-mex-s-function#answer_101805
S-Functionパラメータに配列を渡す方法として上記のQAを参照させていただきましたが、
私の環境ではmxGetPr()で取得できるp[0]ポインタがp[3]の位置を表してしまいp[3]以外のデータにアクセスすることができません。
私が試した環境は以下の通りです。 MATLAB R2013b
・ワークスペースに作成した配列の要素の型:double
・配列の要素は整数のみ設定(3×4の配列に1~12などを設定)
・配列のサイズを変えてもmxGetPr()で取得できるのは必ず最後の要素のポインタ
また、調査のためssGetSFcnParamで取得したMATLAB配列を引数に以下の関数を実施した結果は以下の通りです
mxGetNumberOfDimensions → 2
mxGetDimensions → 1
mxGetNumberOfElements → 1
mxGetM → 1
mxGetN → 1
配列の最後の要素が取得されてしまう原因として考えられることがありましたらご回答いただきますようお願い致します。

Best Answer

answer_101805にあるとおり、ssGetSFcnParamでmxArrayのポインタを取得し、mxGetPrの引数に渡せば、パラメーターへのポインタにアクセスできます。
添付ファイルは、デモモデルsfcndemo_timestwoを 2x2次元のパラメーターに変更しています。
(timestwo.cからmytimes.cへの主な変更点)
23行目:#define TIMES(S) ssGetSFcnParam(S, 0)
80行目:double *times = mxGetPr(TIMES(S));
88行目:*y++ = times[i] *(*uPtrs[i]);
なお、C-MEX S-Functionを独自に作成する場合、
まずはsfundemosから、参考になるデモモデルとソースコードを確認した後、
簡易なモデルを作成し、順次、所望の形へ近づける事をお勧めします。
[関連資料]