• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Mideva編譯器的MATLAB與VC++混合編程技術(shù)

      2016-04-13 09:52:29柴西林姜麗德
      關(guān)鍵詞:編譯器調(diào)用對(duì)話框

      柴西林,姜麗德,馮 凱

      (1.西北師范大學(xué)知行學(xué)院,甘肅 蘭州730070;2. 甘肅天鑒建設(shè)集團(tuán)有限公司,甘肅 蘭州730000)

      基于Mideva編譯器的MATLAB與VC++混合編程技術(shù)

      柴西林1,姜麗德2,馮 凱1

      (1.西北師范大學(xué)知行學(xué)院,甘肅 蘭州730070;2. 甘肅天鑒建設(shè)集團(tuán)有限公司,甘肅 蘭州730000)

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

      MATLAB;VC++;Mideva編譯器;混合編程

      0 引言

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

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

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

      1.1 Mideva簡(jiǎn)介

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

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

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

      圖1 編譯為可執(zhí)行程序

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

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

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

      (1)添加頭文件

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

      圖2 添加頭文件

      (2)添加庫(kù)文件

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

      圖3 添加庫(kù)文件

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

      圖4 添加Visual Matcom

      圖5 在VC下Visual Matcom工具欄

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

      3.1 混合編程實(shí)現(xiàn)過(guò)程流程圖

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

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

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

      圖6 混合編程的實(shí)現(xiàn)過(guò)程流程圖

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

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

      圖7 混合編程總界面

      (4)在文件“MccDemo1Dlg.cpp”中包含頭文件:

      include

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

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

      4 結(jié)論

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

      圖8 向工程添加庫(kù)文件

      圖9 運(yùn)行可執(zhí)行文件結(jié)果

      圖10 執(zhí)行調(diào)用動(dòng)態(tài)鏈接庫(kù)的結(jié)果

      圖11 執(zhí)行直接轉(zhuǎn)換后的代碼結(jié)果

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

      [2] 張亮,王繼陽(yáng).MATLAB與C/C++混合編程[M].北京:人民郵電出版社,2008.

      [3] 柴西林,朱國(guó)平,邵照勇.基于不同算法實(shí)現(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] 蘇金明,黃國(guó).MATLAB與外部程序接口[M].北京:電子工業(yè)出版社,2008.

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

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

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

      MATLAB and VC++ mixed programming technology based on mideva compiler

      Chai Xilin1, Jiang Lide2,Feng Kai1

      (1.Zhixing College, Northwest Normal University,Lanzhou 730070, China;2.Gansu Tianjian Construction Group Co., Ltd.,Lanzhou 730000, China)

      This article mainly studies the method of using Mideva compiler to realize the mixed programming between Matlab and VC++. There are three main ways. In first one,the M file is compiled into executable files by the Mideva compiler, and then the executable file is executed by VC++.In second one, VC++ calls dynamic link library in the run,which is compiled from the M file by the Mideva compiler.In third one, Mideva compiler converts the M file into C++ code, then VC++ uses the converted code directly. Through a process of dialog-based MFC application instance, it is intuitive to demonstrate the implementation process of mixed programming for the foregoing three ways.

      MABLAB;VC++; mideva compiler;mixed programming

      TP311

      A

      1674-7720(2016)01-0023-04

      柴西林,姜麗德,馮凱.基于Mideva編譯器的MATLAB與VC++混合編程技術(shù) [J] .微型機(jī)與應(yīng)用,2016,35(1):23-26

      2015-09-10)

      柴西林(1984-),通信作者,女,碩士,講師,主要研究方向:信號(hào)處理與智能控制。E-mail:chai.xilin@163.com。

      姜麗德(1988-),女,本科,主要研究方向:自動(dòng)化儀器儀表。

      馮凱(1983-),男,本科,助理實(shí)驗(yàn)師,主要研究方向:電子與信息工程。

      猜你喜歡
      編譯器調(diào)用對(duì)話框
      基于相異編譯器的安全計(jì)算機(jī)平臺(tái)交叉編譯環(huán)境設(shè)計(jì)
      正?;謴?fù)虛擬機(jī)
      核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
      Bootlace Worms’Secret etc.
      LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
      基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
      通用NC代碼編譯器的設(shè)計(jì)與實(shí)現(xiàn)
      利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
      快速抓取對(duì)話框中的完整信息
      電腦迷(2012年22期)2012-04-29 20:30:54
      編譯器無(wú)關(guān)性編碼在微控制器中的優(yōu)勢(shì)
      旺苍县| 珲春市| 长丰县| 普格县| 额敏县| 汽车| 淳安县| 监利县| 清原| 红河县| 浦城县| 伊宁县| 深圳市| 宝清县| 瓦房店市| 梁河县| 牡丹江市| 蓬安县| 桃园市| 淳安县| 兴化市| 营山县| 库伦旗| 韶关市| 克山县| 云阳县| 彭阳县| 洛川县| 柳州市| 刚察县| 吉首市| 绥芬河市| 大城县| 磐安县| 大连市| 渭源县| 田阳县| 绥阳县| 余姚市| 玉山县| 西青区|