1、运行环境
Windows 10 64bit
Visual Studio Community 2017
Matlab 2016b
注:也适用于Matlab 2017a
2、matlab安装补丁
打开https://ww2.mathworks.cn/support/sysreq/previous_releases.html,如下图所示。
打开对应的matlab版本“Supported Compilers”列中Details下载的文件,如下图所示。
可以看出Matlab2016b支持VC++2017,但是需要安装补丁。
在文件中点击“Patch required”,跳转到mathworks的bug repots页面,https://ww2.mathworks.cn/support/bugreports/1487958,下载attachment_1487958_16b_win64_2017-05-10.zip(需注册mathworks账号),附件解压后将文件夹覆盖Matlab安装路径同名目录下。
打开Matlab,在命令行中输入
mex -setup
如下图所示,此时Matlab已经可以识别VC++ 2017。
>> mex -setup
MEX 配置为使用 'Microsoft Visual C++ 2017 (C)' 以进行 C 语言编译。
警告: MATLAB C 和 Fortran API 已更改,现可支持
包含 2^32-1 个以上元素的 MATLAB 变量。不久以后,
您需要更新代码以利用
新的 API。您可以在以下网址找到相关详细信息:
http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html。
要选择不同的语言,请从以下选项中选择一种命令:
mex -setup C++
mex -setup FORTRAN
以管理员身份运行命令提示符,切换到"matlab.exe"的路径,输入下方命令进行注册。
matlab /regserver
若不注册,在使用engOpen()打开Matlab引擎会提示失败。
3、VS配置及DEMO
测试Demo
#include
#include
#include
#include"engine.h"
const int BUFFER_SIZE = 1024;
char buffer[BUFFER_SIZE];
void test()
{
Engine* ep;
mxArray *x1 = NULL;
mxArray *y1 = NULL;
if ((ep = engOpen("")) == NULL)
{
printf("Engine Fail\n");
}
engOutputBuffer(ep, buffer, BUFFER_SIZE);
printf("Init Success\n");
double x[5] = { 1.0, 2.5,3.7,4.4,5.1 };
double y[5] = { 3.3,4.7,9.6,15.6,21.3 };
x1 = mxCreateDoubleMatrix(1, 5, mxREAL);
y1 = mxCreateDoubleMatrix(1, 5, mxREAL);
memcpy((char*)mxGetPr(x1), (void *)x, 5*sizeof(double));
memcpy((char*)mxGetPr(y1), (void *)y, 5*sizeof(double));
engPutVariable(ep, "x", x1);
engPutVariable(ep, "y", y1);
engEvalString(ep, "plot(x,y)");
getchar();
engClose(ep);
}
int main()
{
test();
}
打开工程属性页,在“调试”-“环境中”,添加“PATH=
在“VC++目录”中,“可执行文件目录”中添加“Matlab安装路径\bin\win64”,“包含目录”中添加“Matlab安装路径\extern\include”,“库目录”中添加“Matlab安装路径\extern\lib\win64\microsoft”,如下图所示。
在“链接器”-“输入”中,“附加依赖项”中添加“libmat.lib”,“libeng.lib”,“libmx.lib”,如下图所示。
Demo编译后即可调用Matlab进行画图,如下图所示。