如何使用Matlab的多个输出调用C ++函数?

时间:2012-04-26 10:02:28

标签: c++ matlab mex

我有一个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 ++中这种函数的正确实现是什么?

1 个答案:

答案 0 :(得分:3)

Matlab函数的第一个输出参数应声明为C函数的输出参数。 Matlab函数的第二个输出参数应该声明为C函数的第一个输入参数,它具有mxArray **类型等等。

具有多个输出参数的C ++函数应该看起来像

mxArray *foo(mxArray **matrix);

如果函数包含输入参数,则此函数声明为

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