VC6.0學習(三)呼叫MatLab 生成動態連結庫
阿新 • • 發佈:2019-01-14
本人想在win10作業系統下通過VC6.0引用MATLAB生成的dll檔案,這個過程遇到了很多的坑,這裡總結一下具體的過程。
- MATLAB生成.dll
這個過程主要可以在網上參考一些文章關於“ VC三種方法用C++呼叫Matlab”。方法沒有問題,關鍵問題出在了C++ sdk的問題上,因為老一些的MATLAB版本只支援sdk7.1,而這個版本的sdk要在win10系統之前的版本,而在win10作業系統下配置sdk7.1就比較麻煩了。在win10作業系統下使用sdk10相對就方便的多,這樣我們就要選擇支援sdk10的MATLAB版本,通過官網檢視可以檢視,要選擇2017及其更高的版本。選擇了正確的版本我們就可以順利的解決這個問題了。 - VC6.0引用MATLAB的.dll
這裡按照網上相關攻略操作就出現新的狀況了,無法正常引用。經過反覆查詢問題,發現還是相容的問題,VC6.0是32位,然而MATLAB2017b只有64位,所以通過這個版本呼叫的引擎和庫就無法在VC中識別。
最後我將自己寫好的程式移到了win7,MATLAB2015bwin32的環境後成功編譯,確定了是相容性的問題。
總結
使用VC6.0的話還是在win7下配置相應的環境比較簡單;如果要用win10,那麼需要解決以上兩個問題,關鍵是要配置sdk7.1和安裝MATLAB win32的版本。
下面給一個連線,關於實現matlab與vc混合程式設計,寫的不錯, https://wenku.baidu.com/view/e081894ee518964bcf847c62.html
但是存在一點問題,我最終是用MATLAB2015bwin32實現的,直接套用它出現了一點問題,貼一下我的程式碼以供參考:
//matlab 求和函式函式
function [c]=Add(a,b)
c=a+b;
end
//VC 中的實現函式 void CTestDlg::OnButton1() { if( !mclInitializeApplication(NULL,0) ) { AfxMessageBox("Could not initialize the application.\n"); } if(!AddInitialize()) { AfxMessageBox("Can’t Initalize!"); } mwArray a(1,1,mxDOUBLE_CLASS,mxREAL); mwArray b(1,1,mxDOUBLE_CLASS,mxREAL); mwArray c(1,1,mxDOUBLE_CLASS,mxREAL); double data1=2; double data2=3; a.SetData(&data1,1); b.SetData(&data2,1); Add(1,c,b,a); double result=c.Get(1,1); CString str2; str2.Format("Y=%f",result); AfxMessageBox(str2); }
如果有更好的方法,歡迎討論!