matlab2015b与VS2013混合编程(一)调用matlab引擎方式

首先VS配置

这一步很重要,类似于其他C++库的配置,如:添加包含目录和库路径。添加库目录(自己的MATLAB安装路径中查找):D:\matlab\extern

添加库路径(自己的MATLAB安装路径中查找):D:\matlab\extern\lib\win64\microsoft

配置系统环境变量

在Windows环境变量中的系统变量中“Path”中新增下:

D:\matlab\bin\win64;

环境变量配置完成后要重启

matlab配置

在Matlab的command window输入:mex -setup C++

然后在输入mbuild -setup

选择mex -setup C++ -client MBUILD

 

配置结束

开始测试

#include"engine.h" // 添加matlab引擎库的头文件
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
// 导入相关lib库
#pragma comment(lib, "libeng.lib")
#pragma comment(lib, "libmx.lib")
#pragma comment(lib, "libmat.lib")
int main(void)
{
     Engine *ep;
     // 启动引擎
     if (!(ep = engOpen("\0")))
     {
          fprintf(stderr, "\n打开Matlab引擎失败!\n");
          return EXIT_FAILURE;
     }
     // 执行:
     int Nsample = 50;
     const double PI = 3.1415926;
     double *t = new double[Nsample];
     for (int i = 0; i < Nsample; i++)
     {
          t[i] = i * 2 * PI / Nsample;
     }
     mxArray *T = NULL, *result = NULL;
     T = mxCreateDoubleMatrix(1, Nsample, mxREAL);
     memcpy((void *)mxGetPr(T), (void *)t, Nsample *  sizeof(t[0]));
     // 把变量T存入Matlab工作区
     engPutVariable(ep, "X", T);
     // 执行Matlab命令 ??
     engEvalString(ep, "Y=cos(X);");
     engEvalString(ep, "plot(X,Y);");
     engEvalString(ep, "title('y=cos(x)');");
     engEvalString(ep, "xlabel('x');");
     engEvalString(ep, "ylabel('y');");
     fgetc(stdin);
     // 清除对象,不能漏!
     mxDestroyArray(T);
     engEvalString(ep, "close;");
     // 关闭引擎,不能漏!
     engClose(ep);
     return EXIT_SUCCESS;
}

可能出现的报错之一:提示无法定位程序输入点

解决方案: libeng.dll、libmx.dll和libut.dll复制到c:\windows\system32中,如果显示还缺少什么 也是复制进去就可以了。在这里是缺少了tbb.dll,将其复制到c:\windows\system32就可以额

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值