2

我有一个 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;
  }

但是,当我只需要一个输出参数时,我可以很容易地让它工作

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

在 C++ 中这种函数的正确实现是什么?

4

1 回答 1

3

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

具有多个输出参数的 C++ 函数应如下所示

mxArray *foo(mxArray **matrix);

如果在这种情况下函数包含输入参数,则函数声明为

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

于 2012-04-26T10:23:11.670 回答