2

を使用して Matlab コードから呼び出す C++ DLL がありますcalllib。入力パラメーターのみを持つ C++ 関数または を返す関数を呼び出すのに問題はありませんmxArray

現在、いくつかの出力パラメーターを持つ関数を呼び出すのに問題があります。たとえば、行列と整数を返すこの Matlab 関数に相当する C++ が必要です。

function [matrix, status] = foo()
status = 42;
matrix = ones(3,2);
end

何を試しても、Matlab がクラッシュします。たとえば、次のようになります。

DLL_API void foo(mxArray* iop_matrix, int* op_status)
  {
  mxSetM(iop_matrix, 3);
  mxSetN(iop_matrix, 2);
  *op_status = 42;
  }

ただし、必要な出力パラメーターが 1 つだけの場合は、簡単に機能させることができます

DLL_API mxArray* foo(void)
  {
  return mxCreateNumericMatrix(3, 2, mxDOUBLE_CLASS, mxREAL);
  }

C ++でのそのような関数の正しい実装は何ですか?

4

1 に答える 1

3

Matlab 関数の最初の出力パラメーターは、C 関数の出力パラメーターとして宣言する必要があります。Matlab 関数の 2 番目の出力パラメーターは、型などを持つ C 関数の 1 番目の入力パラメーターとして宣言する必要がありますmxArray **

複数の出力パラメーターを持つ C++ 関数は次のようになります。

mxArray *foo(mxArray **matrix);

この場合、関数に入力パラメーターが含まれる場合、関数は次のように宣言されます。

mxArray *foo(mxArray **matrix, mxArray *_1stInpParam, mxArray *_2ndInpParam);

于 2012-04-26T10:23:11.670 に答える