Matlab與C/C++混合編程接口及應用
3.3 利用mcc 編譯器生成的的DLL 文件
Matlab的C++ Complier不僅能夠將Matlab的m文件轉換為C/C++的源代碼,還能產(chǎn)生完全 脫離Matlab運行環(huán)境的獨立可執行DLL程序。從而可以在C/C++程序中,通過(guò)調用DLL實(shí)現對 Matlab代碼的調用。下面通過(guò)一個(gè)簡(jiǎn)單的例子說(shuō)明C/C++調用m文件生成的DLL:
a.建立m文件example4.m: function result=example4(para)
x=[1 para 3]; y=[1 3 1]; plot(x,y); result=para*2; end.然后在命令窗口中輸入:
mcc -t -W libhg:example4 -T link:lib -h libmmfile.mlib libmwsglm.mlib example4則在工作目錄下會(huì )生成example4 .dll、example4 .lib和example4 .h三個(gè)文件。
b.在VC中新建一個(gè)基于對話(huà)框的應用程序Test3,然后添加一個(gè)按鈕及按鈕響應函數,函數內容見(jiàn)d步,再將生成的3個(gè)文件拷貝到Test2工程目錄下。
c.VC編譯環(huán)境的設置如同3.2節c、d步;
d.在按鈕函數文件添加如下的頭文件:#include example4 .h ,函數響應代碼為:
mxArray* para=mxCreateDoubleScalar(2); mxArray* result; example4Initialize();
result=mlfExample4(para); CString str;
str.Format(%f,mxGetScalar(result)); AfxMessageBox(str);
e.編譯,連接,執行,結果如圖3所示。
利用mcc 編譯器生成的DLL 動(dòng)態(tài)連接庫文件,只需在C/C++編譯環(huán)境中將其包含進(jìn)來(lái), 調用導出函數即可實(shí)現原m 文件的功能,極大地方便了用戶(hù)的代碼設計。
4 結束語(yǔ)
本文從Matlab 調用C/C++代碼和C/C+調用m 文件兩方面,詳細地研究了Matlab 與C/C++ 混合編程技術(shù)。對于Matlab 調用C/C++代碼,給出了常用的MEX 技術(shù)和調用C/C++動(dòng)態(tài)連接 庫的方法,并對它們進(jìn)行比較。針對用戶(hù)在實(shí)際中經(jīng)常遇到的C/C++調用Matlab 問(wèn)題,通過(guò)研究給出了常用的三種方法及其特點(diǎn):利用Matlab 計算引擎的方法,混合編程后的可執 行程序脫離不了Matlab 的運行環(huán)境,運行速度很慢;利用mcc 編譯器將m 文件轉化為C/C++ 文件的方法,雖然能獨立于Matlab 運行環(huán)境,可在C/C++環(huán)境中包含生成的文件非常繁瑣; 但是m 文件生成的DLL 為用戶(hù)提供了一種簡(jiǎn)潔方便的C/C++調用Matlab 代碼的方法。除 Matlab 自帶的mcc 外,Matcom 也能將M 文件編譯為C/C++文件和DLL 文件[2][8],但混合編程 原理一樣,在此省略。
評論