如何从 Matlab 调用具有多个输出的 C++ 函数?
Posted
技术标签:
【中文标题】如何从 Matlab 调用具有多个输出的 C++ 函数?【英文标题】:How to call C++ function with multiple outputs from Matlab? 【发布时间】:2012-04-26 10:02:27 【问题描述】:我有一个 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】:Matlab 函数的第一个输出参数应声明为 C 函数的输出参数。 Matlab 函数的第二个输出参数应声明为 C 函数的第一个输入参数,其类型为 mxArray **
,依此类推。
具有多个输出参数的 C++ 函数应如下所示
mxArray *foo(mxArray **matrix);
如果函数在这种情况下包含输入参数,则函数声明为
mxArray *foo(mxArray **matrix, mxArray *_1stInpParam, mxArray *_2ndInpParam);
【讨论】:
以上是关于如何从 Matlab 调用具有多个输出的 C++ 函数?的主要内容,如果未能解决你的问题,请参考以下文章