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:\Matlab2016b\extern\include
庫目錄:G:\Matlab2016b\extern\lib\win64\microsoft
第二步:鏈接器->輸入->附加依賴項,添加以下庫(都是matlab里的庫)
mclmcrrt.lib
libmat.lib
libmx.lib
mclmcr.lib(這個lib缺少經測試也是可以的,但還是先加上吧)
第三步:配置系統變量
“我的電腦”右鍵,打開“屬性”;選擇“高級系統設置”;找到系統屬性頁面的“高級”選項,右下方“環境變量”;頁面中下方是系統變量,將Path設置為G:\Matlab2016b\bin\win64
進行完以上配置后,將電腦進行重啟(讓環境變量生效)。
第四步:重新打開VS2015的項目,將Matlab生成的四個文件放入該項目所在文件夾下。(注意:這就是關鍵所在,很多blog都沒有說明的一點,這里的文件夾指的是Project1\x64\Debug目錄下,這個目錄下,testmat.dll、testmat.lib、testmat.ctf三個文件缺一不可,如果缺少ctf文件,編譯不報錯,初始化內存報錯,而在Project1\Project1目錄下,需要保證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的提示,再調用就不出現了,不知道為什么,無解,百度不到答案。