4

我在 C++ 中有很长的代码,我想从 MATLAB 中调用它。

我读到,使用 MEX 文件,从 MATLAB 调用大型预先存在的 C/C++ 和 Fortran 例程,而无需将它们重写为 MATLAB 函数是可能的。

但是,MEX 文件很麻烦,显然应该更改整个代码。此外,我在从 MATLAB 的命令行调用 C/C++ 编译器时遇到问题。特别是,MATLAB 要求

Select a compiler: 
[1] Lcc-win32 C 2.4.1 in D:\PROGRA~1\MATLAB\R2013a\sys\lcc
[2] Microsoft Visual C++ 2010 in D:\Program Files\Microsoft Visual Studio 10.0

但我的代码是用 Borland c++ 编写的,但 MATLAB 无法将 Borland 识别为编译器。

有没有比我目前正在做的更简单的方法来通过 MEX 文件在 MATLAB 中集成 C/C++ 代码?

4

3 回答 3

6

正如 user2485710 所提到的,您应该使用 MEX 接口来调用您现有的 C++ 代码。MEX 接口基本上是现有 C++ 代码的包装器。

例如,如果您的调用是 call add.c,它将两个数字相加,您将无法在 MATLAB 中直接调用它。你的包装应该是这样的,

#include "mex.h"
void mexFunction( int nlhs, mxArray *plhs[],
              int nrhs, const mxArray *prhs[]) { // Standard gateway function
    double *a = mxGetPr(prhs[0]);
    double *b = mxGetPr(prhs[1]);
    double c = add(a,b);
    mxSetPr(plhs[0], &c);
}

这是一个说明性示例,您可能必须阅读我使用的每个函数的文档。您不必担心编译器。大多数 C++ 程序适用于所有编译器。选择列表中的一种编译器并使用它。有一些限制,但我不知道有谁遇到过这个用例。

于 2013-08-08T11:24:45.977 回答
2

这里阅读,很明显 Matlab 可以与 C 或 Fortran 接口;现在你如何从 C++ 到 C ?你用extern "C".

在这里阅读有关该主题的快速介绍,但基本上这就是您所要做的,extern为您的 C++ 函数公开 C 接口,以便链接器和编译器都知道如何正确构建 C 接口。

由于 C++ 和 C 提供的不同功能,FAQ 还讨论了此解决方案的一些限制。

于 2013-08-08T11:05:41.720 回答
1

作为使用 MEX 文件制作真正的 matlab 界面的替代方法,您还可以通过系统调用简单地调用您的 C++ 程序。您必须先将所需的数据写入文件,这效率低下,但如果您不打算经常使用它,可能比编写真正的界面更好。

于 2013-08-08T11:52:44.150 回答