C++通过动态链接库(.dll)调用matlab

时间:2026-02-17 02:31:40

1、C++可以以多种方式调用matlab。

1、通过调用动态链接库。

2、通过matlab引擎。

3、通过COM组件。

4、通过.NET配件。

这里只介绍C++调用matlab的M文件生成的dll的形式,其他方式可以参考《精通MATLAB与C/C++混合编程》这本书 。

C++通过动态链接库(.dll)调用matlab

2、配置MATLAB

首先编写一个简单的matlab函数。

选择左上角的New->function

编写代码。

然后点击左上角Save,然后会生成一个add.m的文件。

C++通过动态链接库(.dll)调用matlab

C++通过动态链接库(.dll)调用matlab

3、在Command Window窗口配置Matlab。

输入 mex -setup(mex后边有空格)。

选择mex -setup C++ 

C++通过动态链接库(.dll)调用matlab

C++通过动态链接库(.dll)调用matlab

4、接着输入mbuild -setup命令(mbuild后边有空格)

选择mex -setup C++ -client MBUILD 

C++通过动态链接库(.dll)调用matlab

5、在命令行窗口输入命令mcc -W cpplib:add -T link:lib add  前面的 add 是编译产生的文件名,后一个 add 指要编译的.

-W是命令,有多种可选。具体的相关命令和含义可以 doc mcc查看

 add是m文件的名字,生成别的m文件就把add换成你的m文件的名字即可。

C++通过动态链接库(.dll)调用matlab

6、成功后会在MATLAB安装位置生成十个文件。

MATLAB到这里就配置完成了,动态链接库也生成了。

C++通过动态链接库(.dll)调用matlab

C++通过动态链接库(.dll)调用matlab

1、C++的相关操作。

新建一个win32控制台程序matlabtest(空项目),添加test.cpp

C++通过动态链接库(.dll)调用matlab

2、点击 项目->Matlabtest属性

C/C++ -> 常规 -> 附加包含目录:

C:\Program Files\MATLAB\R2015a\extern\include(添加你自己的路径)

C++通过动态链接库(.dll)调用matlab

3、链接器 -> 常规 -> 附加库目录:

"C:\Program Files\MATLAB\R2015a\extern\lib\win64\microsoft";

C:\Program Files\MATLAB\R2015a\bin\add(MATLAB生成的是个文件)

C++通过动态链接库(.dll)调用matlab

4、链接器 -> 输入 -> 附加依赖项:

mclmcrrt.lib;mclmcr.lib;add.lib

C++通过动态链接库(.dll)调用matlab

5、将add.lib add.h文件复制到你的工程目录,其中 .h 文件和 test.cpp 文件同目录, .lib 文件放到可执行目录中,也即Debug目录(需编译一次才会出现),.dll文件复制到system32目录

6、将 .h 文件添加到新建的项目,编写 test.cpp 文件中的代码:

#include "add.h"

#include <iostream>

using namespace std;

int main()

{

if (addInitialize())    //必须的要初始化,格式为  名字Initialize()

{

cout << "成功" << endl;

}

else

{

cout << "失败" << endl;

return 0;

}

//定义3个mwArray类型变量,用于存放矩阵

mwArray a(2, 3, mxDOUBLE_CLASS);

mwArray b(2, 3, mxDOUBLE_CLASS);

mwArray c(2, 3, mxDOUBLE_CLASS);

double x[] = { 2,3,1,5,4,5 };

double y[] = { 8,8,7,9,11,12 };

double *sum = new double[6];        //注意这个是指针

// 给输入 mxArray 对象赋值

a.SetData(x, 6);

b.SetData(y, 6);

//调用DLL函数

add(1, c, a, b);

//获取结果

c.GetData(sum, 6);

//输出结果

for (int i = 0; i<2; i++)

{

for (int j = 0; j<3; j++)

cout << sum[j * 2 + i] << " ";

cout << endl;

}

cout << "it is successful !" << endl;

return 0;

}

7、更改解决方案平台,需要更改成X64

C++通过动态链接库(.dll)调用matlab

C++通过动态链接库(.dll)调用matlab

© 2026 一点资料
信息来自网络 所有数据仅供参考
有疑问请联系站长 site.kefu@gmail.com