我有一个C ++ DLL,我使用calllib
从Matlab代码调用。
我可以毫无困难地调用只有输入参数的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;
}
但是,当我只需要一个输出参数
时,我可以轻松地将其工作DLL_API mxArray* foo(void)
{
return mxCreateNumericMatrix(3, 2, mxDOUBLE_CLASS, mxREAL);
}
C ++中这种函数的正确实现是什么?
答案 0 :(得分:3)
Matlab函数的第一个输出参数应声明为C函数的输出参数。 Matlab函数的第二个输出参数应该声明为C函数的第一个输入参数,它具有mxArray **
类型等等。
具有多个输出参数的C ++函数应该看起来像
mxArray *foo(mxArray **matrix);
如果函数包含输入参数,则此函数声明为
mxArray *foo(mxArray **matrix, mxArray *_1stInpParam, mxArray *_2ndInpParam);