利用Matlab與VC++聯合編程,既可在C語言程序中打開Matlab引擎,調用Matlab的ToolBox函數和作圖函數,也可在Matlab中調用C代碼生成的動態鏈接庫文件,用以加快執行速度、縮短開發周期,取得更好的效果。MATLAB與C語言的接口采用稱為MEX的動態鏈接方式進行。MEX文件是由C源程序經過編譯生成的MATLAB動態鏈接子程序,它的作用十分類似於MATLAB的內建函數,可由MATLAB方便地調用。本文主要講解從Matlab中調用C/C++代碼的相關知識。
Matlab調用C/C++的方式主要有兩種:利用MEX技術和調用C/C++動態連接庫。
利用MEX技術,從MATLAB調用C/C++代碼
1)使用者應該在系統中安裝MATLAB支持的C/C++編譯器。在Matlab與C/C++混合編程之前,必須先對Matlab的編譯應用程序mex和編譯器mbuild進行正確的設置:
對Matlab編譯應用程序mex的設置:mex –setup.
對Matlab編譯器mbuild的設置:mbuild –setup.
2)MEX文件的源文件實際上就是一個C語言源文件, MEX的源文件結構由兩部分組成:入口子程序和功能子程序。
入口子程序起鏈接C子程序與MATLAB系統的作用,是實現MATLAB與C混合編程所必須的。格式為:
其中入口子程序函數名必須為mexFunction。其中nlhs (number of left-hand side) 是輸出參數的個數,nrhs(number of right-hand side) 是輸入參數的個數。prhs[]與plhs[]是指針數組變量,其元素為指向右變量與左變量的指針。在用戶程序中可利用上述指針在C與MATLAB中相互傳遞數據。MEX函數庫裡的mexFunction()函數,相當於C語言中的main()函數。MEX源文件沒有main(),而是以一個mexFunction()代替。
功能子程序用於完成一些特定的計算功能或硬件處理功能,由上述的入口子程序調用。如果必要,該程序可與入口子程序合二為一。
3)MEX源文件的編譯
設上述兩部分形成的源文件存為MyMEXFun.c。則可在MATLAB環境下使用mex MyMEXFun.c命令進行編譯
4)MEX文件的調用格式
[a,b,c...]=MyMEXFun(x,y,z...)
其中,x,y,z...表示函數的輸入變量;a,b,c...表示函數的輸出變量。
5)MEX文件的調試
下面由一個簡單的例子來講解下MEX文件的調試。
在Matlab當前目錄下新建一文件MyMEXFun.c,文件內容為:
首先對文件內容進行簡單說明:
其中nlhs (number of left-handside) 是輸出參數的個數,nrhs (number of right-hand side) 是輸入參數的個數。例如對於c=add(a,b),有nlhs=1,hrhs=2。