在C++Builder中調用Matlab工具箱函數,有兩種實現方式。一種是基於Matlab環境支援,通過必要的設定實現;筆者在本刊上曾撰文對這種方式進行了專門的闡述。另一種則是完全脫離Matlab環境,通過動態串連庫方式實現對Matlab工具箱函數的調用,這可以通過一種開發平台Mediva來實現。相對來說,前者的限制因素較多,而後者則較為方便靈活。
一、Mediva軟體平台
Mediva是Mathtools公司推出的一種Matlab編譯開發軟體平台,提供對Matlab程式檔案(M檔案)的解釋執行和開發環境支援。該軟體有為Borland C++、Visual Basic和Dephi等程式設計語言開發的不同版本,目前其版本已經到了4.5版。軟體大小僅6.5M,可以通過訪問其網站www.mathtools.com免費下載試用一個月。 Mediva軟體平台本身的功能相當強大,提供近千個Matlab的準系統函數,通過必要的設定,就可以直接實現與C++的混合編程,而不必再依賴Matlab;同時,Mediva還提供編譯轉換功能,能夠將Matlab函數或編寫的Matlab程式轉換為C++形式的DLL,從而實現脫離Matlab環境對Matlab函數和過程的有效調用,這樣就有可能實現對Matlab強大的工具箱函數的利用。
Mediva的缺點是C++與Matlab混合編寫的應用軟體必須攜帶必要的DLL,從而增大了軟體的體積(約4M),同時也不能對所有的Matlab函數提供支援,例如採用類庫進行設計的部分函數。但儘管如此,對於控制系統電腦設計、分析的工作來說,Mediva仍不失為一個好的工具。
由於利用Mediva將Matlab工具箱函數轉換成DLL的內容較多,限於篇幅本文在此僅給出對Matlab函數直接調用的實現,而將另撰文闡述DLL的實現。
二、C++Builder直接調用Matlab函數
本文假設已經安裝了Mediva軟體或已經得到必要的兩個動態串連庫mdv4300.dll和ago4300.dll。
Mediva提供的近千個Matlab準系統函數,都可以在C++Builder中直接調用。這些函數包括基本的操作、命令、I/O、線性代數、位元影像、控制等,基本上可以滿足我們的一般需要。當然其最大的優點就是可以直接在C++Buider中直接調用而不必考慮安裝龐大的Matlab。
其實現方式和步驟如下:
1.Lib檔案的產生
在Dos下用C++Builder中的Implib.exe,通過如下命令產生mdv4300.lib: implib mdv4300.lib mdv4300.dll
將上述兩個DLL檔案和此Lib檔案拷貝到目前的目錄下。