15

我想在我的 C++ 项目中调用 MATLAB 函数。

我正在使用 Matlab R2010a 和 Visual Studio 2010

首先,我创建了一个简单的 matlab 函数:

function y = foo(x)
    y = x+1;

然后我使用matlab编译器使用matlab GUI编译器编译这个函数(文件->新建->部署项目,然后选择C++共享库)。它产生这个文件 2 个文件夹:distrib 和 src。

分发包含:

  1. foo.dll
  2. foo.h
  3. foo.lib

src 包含:

  1. foo.cpp
  2. foo.dll
  3. foo.exp
  4. foo.exports
  5. foo.h
  6. foo.lib
  7. foo_mcc_component_data.c

我想在 C++ 应用程序中使用这个文件。我尝试了很多次,但我没有找到方法。我在互联网上找到的所有方法都是使用旧的 matlab 编译器,它产生不同的文件或在旧版本的 Visual Studio 上工作。

所以请有人可以帮助我吗?

我必须做什么?我必须添加哪些文件/参考以及添加到哪里?我必须定义哪些路径?

4

2 回答 2

12

也许为时已晚,但对于未来。

包括foo.h.

C/C++-General-Additional Include Directories 添加到 matlab 头文件 ( C:\Program Files (x86)\MATLAB\R2009b\extern\include)。

在 Additional Dependencies中为Linker添加foo.lib和。mclmcrrt.libmclcommain.lib

对于附加库目录中的链接器,显示指向您的 matlab 库的方式(对于 32 位版本(matlab 和 VS 版本应该相同。我必须安装第二个 Matlab 32 位版本。))。C:\Program Files (x86)\MATLAB\R2009b\extern\lib\win32\microsoft

foo.lib我在我的系统路径中添加了方法。

在使用你的库之前foo.dll,你应该初始化 MCR 和库函数。

mclInitializeApplication(NULL,0);
fooInitialize(); 

使用后不要忘记:

mclTerminateApplication();
fooTerminate();

还有一些演示代码,如下所示:

int num = 1;
double numbrIn = 1.5;
std::cout<<"now we have " << numbrIn << std::endl;
mwArray array_in(num, 1, mxDOUBLE_CLASS, mxREAL);
array_in.SetData(&numbrIn,num);
mwArray array_out;
foo(1, array_out, array_in);
array_out.GetData(&numbrIn, num);
std::cout<<"now we have " << numbrIn << std::endl;
于 2012-05-04T04:41:04.357 回答
3

这些文件是编译您的应用程序foo.hfoo.lib必需的。该foo.dll文件将需要随您生成的应用程序一起提供,通常位于同一目录中。

如果将foo.h文件放在与源文件相同的目录中,则无需对#include "foo.h". 您还可以foo.lib在外部链接器依赖项中添加直接路径。

如果您想将这些文件存储在您的项目文件夹之外和/或在其他应用程序中重新使用这些文件,您可以阅读VC++ 目录、项目和解决方案

编辑:您可能还需要将 MATLAB 库添加到您的包含和库路径中。查看 MathWorks 支持解决方案为什么在尝试编译独立应用程序时收到错误“找不到包含文件“mclmcrrt.h””?

于 2011-06-21T17:18:29.153 回答