繁体   English   中英

如何从C ++调用Matlab函数

[英]How to Call Matlab Functions from C++

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

我正在使用Matlab R2010a和Visual Studio 2010

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

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

然后我用matlab编译器使用matlab GUI编译器编译这个函数(File-> new - > Deployment Project然后选择C ++ shared Library)。 它生成这个文件2个文件夹:distrib和src。

distrib包含:

  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上工作。

所以,任何人都可以帮助我吗?

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

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

包括foo.h

添加C / C ++ - 一般 - 附加包含目录到matlab头的方式( C:\\Program Files (x86)\\MATLAB\\R2009b\\extern\\include )。

在附加依赖 mclcommain.lib链接器添加foo.libmclmcrrt.libmclcommain.lib

对于附加库中的 链接器目录显示了matlab库的方式( C:\\Program Files (x86)\\MATLAB\\R2009b\\extern\\lib\\win32\\microsoft for 32bit ver(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;

编译应用程序需要文件foo.hfoo.lib foo.dll文件需要与生成的应用程序一起提供,通常位于同一目录中。

如果将foo.h文件放在与源文件相同的目录中,则不需要对#include "foo.h"执行任何特殊操作。 您还可以在外部链接器依赖foo.lib中添加foo.lib的直接路径。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM