我想在我的C ++项目中调用MATLAB函数。
我正在使用Matlab R2010a和Visual Studio 2010
首先我创建了一个简单的matlab函数:
function y = foo(x)
y = x+1;
然后我使用matlab编译器使用matlab GUI编译器编译此函数(File-> new - > Deployment Project,然后选择C ++共享库)。它生成这个文件2个文件夹:distrib和src。
distrib包含:
src包含:
我想在C ++应用程序中使用此文件。我尝试了很多次,但我找不到办法。我在互联网上找到的所有方法都使用旧的matlab编译器,它可以生成不同的文件,也可以在旧版本的visual studio上使用。
那么请有人帮助我吗?
我该怎么办?我必须添加哪些文件/参考文件?我必须定义哪些路径?
答案 0 :(得分:12)
也许为时已晚,但未来。
包括foo.h
。
添加 C / C ++ - 常规 - 附加包含目录到matlab标题的方式(C:\Program Files (x86)\MATLAB\R2009b\extern\include
)。
为附加依赖项中的链接器添加foo.lib
,mclmcrrt.lib
和mclcommain.lib
。
对于其他库目录中的链接器 显示了matlab库的方式(C:\Program Files (x86)\MATLAB\R2009b\extern\lib\win32\microsoft
的32位版本(matlab和VS版本应该相同。我不得不安装第二个Matlab 32bit版本。))。
我在系统路径中添加了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;
答案 1 :(得分:3)
编译应用程序需要文件foo.h
和foo.lib
。 foo.dll
文件需要与生成的应用程序一起提供,通常位于同一目录中。
如果将foo.h
文件放在与源文件相同的目录中,则不需要对#include "foo.h"
执行任何特殊操作。您还可以在外部链接器依赖项中添加foo.lib
的直接路径。
如果您想将这些文件存储在项目文件夹之外和/或在其他应用程序中重复使用这些文件,您可以阅读VC++ Directories, Projects and Solutions。
编辑:您可能还需要将MATLAB库添加到包含和库路径中。查看MathWorks支持解决方案Why do I receive the error 'Could not find include file "mclmcrrt.h"' when trying to compile a stand-alone application?