原创文章,欢迎转载。转载请注明:转载自 祥的博客
原文链接:https://cloud.tencent.com/developer/article/1596439
- @[toc]环境以及配置开发环境配置1.代码及效果1.1. 代码1.2. 效果2.会出现的问题及其解决方案2.1.编译链接问题2.2.环境变量问题
VS和Matlab混合编程(调用Matlab Engine)
看完本文之后,可以看一下这篇文章:VS和Matlab混合编程(相关API使用-进阶)
Window7 x64
VS2015
Matlab R2013a x64
VS
的开发平台选择为·x64
(因为Matlab
是x64
的)项目属性->VC++目录->包含目录
中添加:C:\Program Files\MATLAB\R2013a\extern\include
项目属性->VC++目录->库目录
中添加:C:\Program Files\MATLAB\R2013a\extern\lib\win64\microsoft
项目属性->连接器->输入->附加依赖项
里,添加三个库文件:
libeng.lib;libmx.lib;libmex.lib;
(但是我们可以用#pragma comment(lib,"XXX.lib")
命令替代这一操作)#include <iostream>
using namespace std;
#include "engine.h"
//包含目录 C:\Program Files\MATLAB\R2013a\extern\include
//库目录 C:\Program Files\MATLAB\R2013a\extern\lib\win64\microsoft
//Matlab运行环境变量 C:\Program Files\MATLAB\R2013a\bin\win64
//附加依赖项[下面3行,可以直接在配置中设置]
#pragma comment(lib,"libeng.lib")
#pragma comment(lib,"libmx.lib")
#pragma comment(lib,"libmex.lib")
int main()
{
cout << "正在打开Matlab engine ..."<<endl;
Engine* ep; //定义engine类型指针,往后函数都要用它来指示目标
ep = engOpen(NULL); //启动函数,成功则返回一个非零值
if (ep == NULL) {
cout << "无法打开 Matlab engine!"<<endl;
return 1;
}
else
{
cout << "Matlab Engine 启动成功" << endl;
}
//引号里为Matlab命令,相当于发送命令到Matlab里的命令行控制台
engEvalString(ep, "x=0:0.1:4*pi");
engEvalString(ep, "y=sin(x);");
engEvalString(ep, "plot(x,y);");
cout << "输入 q 退出"<<endl;
char quit_flg;
while (true)
{
cin >> quit_flg;
if ('q'==quit_flg)
{
break;
}
}
engEvalString(ep, "close;");//关闭画图窗口
engClose(ep);// 释放内存空间,关闭计算引擎
return 0;
}
运行后会弹出3个窗口,除了Windows Cmd界面
外,还有 Matlab绘图窗口
和 Matlab Cmd界面
按q键
退出程序,销毁 Matlab绘图窗口
和 Matlab Cmd界面
记住如果你的Matlab
是x64
的,那么你的VS
的编译平台一定也要是x64
。
运行时出现问题,解决方案就是:添加环境变量,将添加到环境变量Path
中(根据自己Matlab安装路径更改)
添加环境变量