VS2017调用Matlab2016b进行绘图

1、运行环境

Windows 10 64bit

Visual Studio Community 2017

Matlab 2016b

注:也适用于Matlab 2017a

2、matlab安装补丁

打开https://ww2.mathworks.cn/support/sysreq/previous_releases.html,如下图所示。

VS2017调用Matlab2016b进行绘图_第1张图片

打开对应的matlab版本“Supported Compilers”列中Details下载的文件,如下图所示。

VS2017调用Matlab2016b进行绘图_第2张图片

可以看出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引擎会提示失败。

VS2017调用Matlab2016b进行绘图_第3张图片

 

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=”,否则会提示找不到dll。

 

VS2017调用Matlab2016b进行绘图_第4张图片

在“VC++目录”中,“可执行文件目录”中添加“Matlab安装路径\bin\win64”,“包含目录”中添加“Matlab安装路径\extern\include”,“库目录”中添加“Matlab安装路径\extern\lib\win64\microsoft”,如下图所示。

VS2017调用Matlab2016b进行绘图_第5张图片

在“链接器”-“输入”中,“附加依赖项”中添加“libmat.lib”,“libeng.lib”,“libmx.lib”,如下图所示。

VS2017调用Matlab2016b进行绘图_第6张图片

Demo编译后即可调用Matlab进行画图,如下图所示。

VS2017调用Matlab2016b进行绘图_第7张图片

你可能感兴趣的:(编程)