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

How to call C++ function with multiple outputs from Matlab?

本文关键字:输出 调用 C++ 函数 何使用 Matlab      更新时间:2023-10-16

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

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

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

mxArray *foo(mxArray **matrix);

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

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