Matlab生成dll等文件的步骤之前文章里有,下边写一下VS调用MATLAB生成的dll的方法。(QT调用方法一样)
https://www.cnblogs.com/zzzsj/p/14630559.html
C++部分:
创建工程文件,注意:测试环境使用的是64位操作系统,因此务必在x64环境下进行以下配置。(这是与你的matlab版本匹配的,我的matlab安装的是64bit的)
第一步:VC++目录
假设Matlab安装目录为G:Matlab2016b,这个根据本机安装目录自行调整。
包含目录:G:Matlab2016bexterninclude
库目录:G:Matlab2016bexternlibwin64microsoft
第二步:链接器->输入->附加依赖项,添加以下库(都是matlab里的库)
mclmcrrt.lib
libmat.lib
libmx.lib
mclmcr.lib(这个lib缺少经测试也是可以的,但还是先加上吧)
第三步:配置系统变量
“我的电脑”右键,打开“属性”;选择“高级系统设置”;找到系统属性页面的“高级”选项,右下方“环境变量”;页面中下方是系统变量,将Path设置为G:Matlab2016binwin64
进行完以上配置后,将电脑进行重启(让环境变量生效)。
第四步:重新打开VS2015的项目,将Matlab生成的四个文件放入该项目所在文件夹下。(注意:这就是关键所在,很多blog都没有说明的一点,这里的文件夹指的是Project1x64Debug目录下,这个目录下,testmat.dll、testmat.lib、testmat.ctf三个文件缺一不可,如果缺少ctf文件,编译不报错,初始化内存报错,而在Project1Project1目录下,需要保证testmat.dll、testmat.lib、testmat.h这3个文件)。
第五步:调试–>窗口–>异常设置–>Win32 Exceptions全部不要勾选。
至此完成VS的配置。
下边是测试代码:(我用QT写的,用法一样,凑合看)
void MainWindow::on_pushButton_clicked() { if( !testmatInitialize() ) //testmatInitialize()Matlab自动生成的初始化函数,调用函数之前必须先初始化 { qDebug()<<"fail2"; } qDebug()<<"success"; mwArray aa(1,1,mxDOUBLE_CLASS,mxREAL); mwArray bb(1,1,mxDOUBLE_CLASS,mxREAL); mwArray cc(1,1,mxDOUBLE_CLASS,mxREAL); double a[1]={12}; double b[1]={5}; double c[1]; aa.SetData(a,1); bb.SetData(b,1); testmat(1,cc,aa,bb); //目标函数 cc.GetData(c,1); ui->label->setText(QString::number(c[0])); }
运行结果:
ps:一个小问题,在主界面上第一次调用函数时,程序输出栏里会出现SetThrowSegvLongjmpSEHFilter(): filter function installed的提示,再调用就不出现了,不知道为什么,无解,百度不到答案。