を使用して 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 ++でのそのような関数の正しい実装は何ですか?