如何用C++调用Matlab函数

How to Call Matlab Functions from C++

本文关键字:Matlab 函数 调用 C++ 何用      更新时间:2023-10-16

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

我使用的是Matlab R2010a和Visual Studio 2010

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

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

然后我使用matlab编译器使用matlab GUI编译器(文件->新->部署项目,然后选择C++共享库)来编译这个函数。它生成两个文件夹: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编译器,它可以生成不同的文件或在旧版本的visualstudio上工作。

有人能帮我吗?

我该怎么办?我必须添加哪些文件/引用以及添加到哪里?我必须定义哪些路径?

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

包括foo.h

C/C++-General Additional Include Directories添加到matlab头文件(C:Program Files (x86)MATLABR2009bexterninclude)中。

为附加依赖项中的链接器添加foo.libmclmcrrt.libmclcommain.lib

对于中的链接器,附加库目录显示了通往matlab库的方法(32位版本的C:Program Files (x86)MATLABR2009bexternlibwin32microsoft(matlab和VS版本应该相同。我必须安装第二个32位版本。)。

我在系统路径中添加了到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.libfoo.dll文件需要与生成的应用程序一起提供,通常位于同一目录中。

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

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

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