李 雯
(寶雞職業技術學院電子信息工程系,721000)
?
Matlab與VC混合編程的方法研究
李 雯
(寶雞職業技術學院電子信息工程系,721000)
摘要:Matlab與VC是應用范圍較廣的編程語言,將二者進行混編是計算機軟件領域人士一直思考的重要課題。本文就如何實現二者的完美結合進行了深入的探討。
關鍵詞:Matlab;VC;混合編程
Matlab,其全稱為MATrix LABoratory,中文翻譯為矩陣實驗室,它是由美國The MathWorks公司出品的商業數學軟件,其主要功能是數值計算,而VC語言作為系統設計語言,在編寫計算機程序時有著廣泛的應用,然而,Matlab與VC語言由于各種原因的限制導致二者之間的編程無法共存,這給開發者帶來了不小的麻煩。近年來隨著編程方法的日益成熟,二者之間互不兼容的現象得到了改善,特別是Matlab2010的研發不僅保存了傳統的Matlab7.0編譯器基本構架穩定的優勢,而且開發了新的功能,使得混編程序向下兼容性越來越好,但二者混編以后仍然會出現結構不穩定的現象。混編設計都要遵循一定的原則,有著固定的混編方法,因此在進行混編時,只要掌握了一定的方法都可以按照需要選擇不同的混編模式。筆者經過長期的實踐,發現了以下三種方法進行混編會取得良好的效果
Matlab編譯器可將Matlab程序編譯為獨立可執行程序,通過修改接口文件的方式實現在C/C++中調用Matlab文件。生成獨立運行的Matlab程序是使用Matlab編譯器編譯的文件最常用的一種方式。Matlab編譯器的主要功能是將Matlab程序編譯成其他語言可以調用的模塊或元素。Matlab編譯器的主要功能是將Matlab程序編譯為可執行程序或者動態鏈接庫,經過編譯后的可執行程序可以所有的計算機中運行,不管這臺計算機是否安裝了Matlab軟件,而編譯后的動態鏈接庫則成為C/C++開發人員的工具,使他們在任何一臺計算機中完成軟件的開發工作。除此之外架構在Matlab編譯器之上的Matlab Builder NE工具箱可以將Matlab程序編譯為Com組件供第三方程序調用。
傳統的Matlab 6.5以及以前的編譯器都將研究的重點放在了如何實現Matlab程序與C/C++程序之間的轉化,而Matlab 7.0及其以后的編譯器打破了這種觀念的桎梏,將MCR技術引用到設計中,將開發的重點放在了Matlab程序編譯為MCR可執行的程序。MCR是Matlab提供的一組動態鏈接庫,可以說是簡化版的Matlab,它支持Matlab語言的所有特征,這就意味著所有的Matlab程序都可以在MCR中得到編譯,這樣即使計算機未安裝Matlab也可以執行Matlab程序。
Matlab編譯器最常見的應用就是將其編譯為獨立可執行文件。采用MCC命令的-m選項可以將*.m函數文件直接編譯為獨立可執行文件。動態鏈接庫的編譯過程與獨立可執行文件的編譯過程類似,可以有兩種方法將*.m函數文件編譯為動態鏈接庫。①采用MCC編譯選項;②采用捆綁命令文件。
Matlab作為一個頗受歡迎的數學軟件,包括了多種數學運算程序,這樣當用戶需要數值運算的時候就可以運用Matlab引擎使用Matlab中的運算公式進行計算。Matlab的界面部分是由C/C++語言組成的,為用戶的使用提供了方便。
Matlab中蘊含著大量的API函數用于支撐Matlab操作的實現,這些函數都以eng開頭,因此掌握eng函數是實現Matlab 與V C++語言順暢兼容的前提和基礎。具體操作流程如下:
2.1Engine * engOpen(coust char * startcmb)
啟動Matlab引擎時要注意其操作環境,如果操作環境為Windows的話,就必須要將startcmd參數設置為NULL。
2.2int engClose(Engine * ep)
關閉Matlab引擎。
2.3int engEvalString ( Engine * ep , const char * string )
使 Matlab 引擎執行字符串 string中的表達方式
2.4int engPutVariable (Engine * ep , const char * nane , const mxArray * mp )
向Matlab引擎工作空間中引入一個新的Matlab 陣列變量,name選項這一欄填寫為引入Matlab中的名字。
2.5mxArry * engGetVariable ( Engine * ep , const
char * name )
從Matlab 引擎工作空間中復制名稱為 name 的變量。
2.6int engGetVisible ( Engine * ep , bool * value )
判斷Matlab引擎工作窗口是否可見。
C/C++通過Matlab引擎調用Matlab程序的這種方法必須要在計算機中存有Matlab軟件的環境下才能實現,脫離了這個環境,就無法實現C/C++語言與Matlab程序的兼容。
通過Matlab編譯器的mcc 命令,可以將Matlab * ·m文件直接編譯為動態鏈接庫以供Visueil C++ 調用,以Plotsinc 函數為例,采用命令mcc-B csharedlib :libsincplot Sincplot ·m 將其編譯為動態鏈接庫。接著,創建一個 Visual C++ 單文檔的工程 testsincplot-dll ,然后通過選擇project settings link input菜單選項將庫文件libsincplot.lib、mclmcrrt. lib加入到Visual c++6.0工程中 ,其中libsincplot.lib為上述步驟中由Matlab編譯器生成的文件之一。
將libsincpiot.dll復 制 到Windows系 統 目 錄 或 者testsincpiot_dll工程的debug目錄下,將libsincplot.h、libsincplot.lib文件拷貝到testsincpiot_dll工程的源文件目錄下,并將其libsincplot.h文件添加到工程中。
Matlab與C/C++混合程序設計的實踐性和技巧性較強,本文介紹了混合編程的三種方法,具體應用還要結合開發者的具體情況進行選擇,希望對從事程序開發讀者有所幫助。
參考文獻
[1]劉維著. 精通Matlab與c/c++混合程序設計[M]. 北京航空航天大學出版社
[2] 張亮,王繼陽著. MATLAB與c/c++混合編程[M]. 人民郵電出版社出版
課題名稱:省職教學會的課題《基于VC和MATLAB的仿真實驗平臺的設計》
課題編號:SZJYB2015033
Matlab and VC mixed programming method
Li Wen
(Baoji professional technology institute,Department of electronic and information engineering,721000)
Abstract:Matlab and VC is the programming language has a wide application scope,will be to mix both people in the field of computer software has been a important subject.In this paper,how to achieve the perfect combination of the two had in-depth discussion.
Keywords:Matlab;VC;Mixed programming