《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于Mideva編譯器的MATLAB與VC++混合編程技術(shù)
基于Mideva編譯器的MATLAB與VC++混合編程技術(shù)
2016年微型機與應(yīng)用第1期
柴西林1,姜麗德2,馮凱1
(1.西北師范大學(xué)知行學(xué)院,,甘肅 蘭州730070,; 2. 甘肅天鑒建設(shè)集團(tuán)有限公司,,甘肅 蘭州730000)
摘要: 主要研究使用MATLAB編譯器實現(xiàn)MATLAB和VC++混合編程的方法,。通過VC++直接運行Mideva編譯好的MATLAB可執(zhí)行文件,或者調(diào)用Mideva編譯好的M文件動態(tài)鏈接庫,,或者直接使用將M文件由Mideva轉(zhuǎn)換的C++代碼等三種方式之一,,均可實現(xiàn)混合編程,。將以上三種方法,,通過一個基于MFC的對話框程序?qū)嵗?,較直觀地演示混合編程的實現(xiàn)過程。
關(guān)鍵詞: Matlab VC Mideva編譯器 混合編程
Abstract:
Key words :

  摘要:主要研究使用MATLAB編譯器實現(xiàn)MATLAB和VC++混合編程的方法。通過VC++直接運行Mideva編譯好的MATLAB可執(zhí)行文件,,或者調(diào)用Mideva編譯好的M文件動態(tài)鏈接庫,,或者直接使用將M文件由Mideva轉(zhuǎn)換的C++代碼等三種方式之一,均可實現(xiàn)混合編程,。將以上三種方法,,通過一個基于MFC的對話框程序?qū)嵗^直觀地演示混合編程的實現(xiàn)過程,。

  關(guān)鍵詞: MATLAB,;VC++;Mideva編譯器,;混合編程

0引言

  MATLAB是當(dāng)前在國內(nèi)外十分流行的工程設(shè)計和系統(tǒng)仿真軟件[1]。MATLAB具有很強的數(shù)值計算和分析能力,,尤其是其功能龐大的工具箱可直接應(yīng)用到很多工程領(lǐng)域[2],。它以函數(shù)的形式為用戶提供不同領(lǐng)域的計算,通過調(diào)用需要的函數(shù)并賦予實際參數(shù),,用戶就能解決實際問題[3],。而VC++在這方面的應(yīng)用不太成熟,但是VC++具有高效,、靈活等特點,。在科學(xué)研究和工程實踐中,將MATLAB和VC++結(jié)合起來進(jìn)行混合編程,,具有非常重要的意義,。但是,M語言是一種解釋性語言,,其應(yīng)用場合和執(zhí)行速度都受到了限制,;而VC++是一種高效率、能對硬件進(jìn)行操作的高級語言,。將兩者的優(yōu)勢結(jié)合起來,,無疑給編程者帶來了福音,使工作效率大大提高,,開發(fā)周期明顯縮短,。

  MATLAB與Visual C++的混合編程技術(shù)方法有很多,主要有使用MATLAB引擎,、使用ActiveX控件,、使用MAT文件共享數(shù)據(jù)、使用Mideva工具,、使用CMEX技術(shù)和使用Matlab其他編譯器等多種技術(shù)實現(xiàn)混合編程,。通常,根據(jù)兩款軟件的特點,在混合編程中核心程序的開發(fā)主要由Matlab完成,,而VC++可用來開發(fā)交互式很好的GUI且易于與硬件接口,。

1Mideva集成調(diào)試編輯環(huán)境

  11Mideva簡介

  Mideva是一種具有比MATLAB更強大的編輯、調(diào)試功能的集成調(diào)試編輯環(huán)境[4],,通過其內(nèi)核Matcom 能夠?qū)文件轉(zhuǎn)化為C語言的代碼[5],,并通過Visual C++將其編譯成可執(zhí)行程序或動態(tài)鏈接庫[5]。近千個基本的MATLAB功能函數(shù)包含于Mideva中,,在與C++的混合編程中只需做必要的設(shè)置即可,,從而不再依賴MATLAB,實現(xiàn)了對MATLAB強大工具箱函數(shù)的調(diào)用,。不足之處在于,,Matcom對struct等類的支持不足,而且有些繪圖尤其是三維繪圖效果不是很好,。因此,,涉及三維繪圖以及M文件太大的情況下,不適合使用,。

  12Mideva集成調(diào)試編輯環(huán)境的配置

  在MATLAB環(huán)境中可以由M文件生成exe文件,,但此exe文件仍需要MCR才能運行,而利用Matcom則可以生成不再需要Matcom環(huán)境支持的exe文件[67],。其生成方法相當(dāng)簡便,,直接利用Matcom菜單“File/Compile to exe…”彈出如圖1所示的對話框,然后選擇所需的M文件,,Matcom會自動生成相應(yīng)的exe文件,。Mideva的此項功能是僅針對Visual C++開發(fā)的,生成dll的方法與生成exe文件的方法類似,,在此過程中會同時生成相應(yīng)的cpp文件,。因此,如果使用Visual C++開發(fā)程序,,最好直接使用上述過程中編譯生成的cpp文件,,而不要直接使用dll文件。編譯過后在Mideva下方的輸出欄,,如圖1所示,,顯示編譯完成。

001.jpg

  值得說明的是,,Mideva環(huán)境下繪制圖形,,還可以設(shè)計GUI界面程序,與MATLAB的GUIDE相似[8],。Mideva還可以像VC++一樣對M文件進(jìn)行調(diào)試,。

2Mideva集成調(diào)試編輯環(huán)境的使用

  Mideva安裝時會提示選取C/C++編輯器,,還需要指定MATLAB,以便使編譯文件中的一些系統(tǒng)函數(shù)找到所需路徑。Mideva接口方便,,通過菜單File→Compile to dll可直接實現(xiàn)M文件到可執(zhí)行文件的轉(zhuǎn)換,,同時會自動生成相應(yīng)的C/CPP文件。為了將C/CPP代碼添加到VC++的工程中,,必要的設(shè)置主要有以下幾步,。

  (1)添加頭文件

  在“matcom45\\lib”目錄下,,可以找到Mideva提供的函數(shù)頭文件Matlib.h,。具體方法是:在菜單“Tools/Options…”中,選擇“Directories”選項卡,然后在“Show Directories for”中選取“Include files”,然后添加目錄“matcom45\\lib”,。如圖2所示,。

002.jpg

  (2)添加庫文件

  在“Show Directories for”中選取“Library files”,,然后添加目錄“matcom45\\lib”,。如圖3所示。需要注意的是,,不同版本的Mideva文件名可能略有差異,可以修改matlibh中Matcom_VERSION宏定義,。

 

003.jpg

  以VC60為例,,Mideva同時提供可供使用的插件,單擊VC60菜單“Tools/Customize...”,,將會彈出如圖4所示對話框,,然后選擇“Addins and Macro Files”選項卡,單擊瀏覽按鈕,,選擇“matcom45/bin/mvcidedll”,,單擊關(guān)閉,則在VC60集成環(huán)境中出現(xiàn)Visual Matcom圖標(biāo),,此時表明MATLAB的編譯工具已與VisualC ++連接,,如圖5所示?! ?/p>

004.jpg

3使用Mideva實現(xiàn)混合編程

  31混合編程實現(xiàn)過程流程圖

  運用Visual C++調(diào)用MATLAB實現(xiàn)混合編程,,通過以下三種方式均可實現(xiàn):(1)Mideva將M文件編譯為可執(zhí)行文件,VC通過編程執(zhí)行可執(zhí)行文件實現(xiàn)混合編程,。(2)Mideva將M文件編譯為動態(tài)鏈接庫,,VC在運行時調(diào)用。(3)Mideva將文件轉(zhuǎn)換為C++代碼,,VC直接使用轉(zhuǎn)換后的代碼進(jìn)行混合編程,。將以上三種方法通過一個基于MFC的對話框程序?qū)嵗?,演示混合編程的實現(xiàn)過程,如圖6所示,。

005.jpg

  32基于 MFC的對話框?qū)嵗绦驅(qū)崿F(xiàn)混合編程的步驟

 ?。?)創(chuàng)建名稱為MidevaDemo1m的M文件。在MATLAB環(huán)境下創(chuàng)建M文件,,內(nèi)容為一個簡單的正弦函數(shù),。并將M文件保存在新建的工程目錄下。

 ?。?)在Mideva環(huán)境下將MidevaDemo1m分別編譯為動態(tài)鏈接庫和可執(zhí)行文件,,在工程目錄下產(chǎn)生相關(guān)的代碼。由于動態(tài)鏈接庫和可執(zhí)行文件產(chǎn)生的“g_MidevaDemo1cpp”不同,,所以分別新建兩個工程目錄“DLLWORK”和“EXEWORK”,。其他兩個文件“MidevaDemo1h”和“MidevaDemo1cpp”在兩個工程中內(nèi)容相同。

 ?。?)創(chuàng)建MFC對話框的工程,,工程名稱為MCCDemo。設(shè)計對話框界面如圖7所示,。

006.jpg

 ?。?)在文件“MccDemo1Dlgcpp”中包含頭文件:

  include<matlib.h>

  (5)向工程添加文件V4501lib,,如圖8所示,。

007.jpg

  (6)在圖7所示的MFC實例混合編程運行結(jié)果總界面中,,單擊“執(zhí)行EXE程序”按鈕,,則彈出如圖9所示界面;單擊“調(diào)用DLL代碼”則彈出如圖10所示界面,;單擊“執(zhí)行源代碼”則彈出如圖11所示界面,。

008.jpg

4結(jié)論

  從上述運行結(jié)果可以看出,不同的運行方式得到的圖形繪制結(jié)果一致,。運用VC++通過編程執(zhí)行exe文件實現(xiàn)的混合編程,,這種方式易于維護(hù),但應(yīng)用程序耦合比較松散,,界面不統(tǒng)一,。VC ++調(diào)用MATLAB數(shù)學(xué)庫和經(jīng)過編譯的動態(tài)鏈接庫,具有內(nèi)存需求小,、執(zhí)行速度快,、可以發(fā)布給沒有MATLAB的用戶使用等顯著的優(yōu)點。但也有幾個缺點:用戶不能夠在基于MATLAB數(shù)學(xué)庫和圖形庫的應(yīng)用程序中使用MATLAB的 eval()和input()函數(shù),,不能調(diào)用圖形句柄系統(tǒng)的函數(shù),,不能調(diào)用MATLAB工具箱的函數(shù),。本文僅在可行性(feasibility)層面上進(jìn)行了論證,對于實質(zhì)性的應(yīng)用還需進(jìn)一步研究和實踐,。

參考文獻(xiàn)

 ?。?] 柴西林,邵照勇.基于MatlabGUI的數(shù)字濾波器設(shè)計及其應(yīng)用[J].微型機與應(yīng)用,2012,31(14):3-6.

 ?。?] 張亮,王繼陽.MATLAB與C/C++混合編程[M].北京:人民郵電出版社,2008.

 ?。?] 柴西林,朱國平,邵照勇.基于不同算法實現(xiàn)的數(shù)字圖像水印技術(shù)及其抗攻擊性比較[J].數(shù)字技術(shù)與應(yīng)用,2012(3):97-98.

  [4] IDEVA1 M.Matcom &Visual Matcom user’s guide V 45 Release [M] .MathToo1s Ltd.,1999.[5] 蘇金明,黃國.MATLAB與外部程序接口[M].北京:電子工業(yè)出版社,,2008.

 ?。?] 楊文臣,張輪,何兆成,等.Matlab 與VC++混合編程及其在交通信號兩級模糊控制中的應(yīng)用[J].公路交通科技,2012,29(9):123-128.

  [7] 易馳,文小玲,鄒艷華,,等.基于VC++60的讀表軟件設(shè)計[J].微型機與應(yīng)用,2014,33(5):16-19.

 ?。?] 肖永韌,解習(xí)農(nóng),劉曉峰.VC 與MATLAB 混合編程之DL L實現(xiàn)方法[J].計算機工程與應(yīng)用, 2001(13):174- 176.


此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。