版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1VC與Matlab接口編程 Matlab Engine方式 Matlab CC+函數(shù)庫(7.0后不建議使用,略) Matlab自帶的Matlab Compiler Matcom技術(shù) COM組件接口方法(Visual C+6.0 Matlab 6.5)第1頁/共46頁第一頁,編輯于星期日:七點 二十九分。2Matlab Engine方式 Matlab Engine是指一組Matlab提供的接口函數(shù),支持C語言, Matlab Engine采用C/S(客戶機(jī)/服務(wù)器)模式,Matlab作為后臺服務(wù)器,而C程序作為前臺客戶機(jī),通過Windows的動態(tài)控件與服務(wù)器通信,向Matlab Engine傳
2、遞命令和數(shù)據(jù)信息,從Matlab Engine接受數(shù)據(jù)信息。用戶可以在前臺應(yīng)用程序中調(diào)用這些接口函數(shù),實現(xiàn)對Matlab Engine的控制。采用這種方法幾乎能利用Matlab全部功能,但是需要在機(jī)器上安裝Matlab軟件,而且執(zhí)行效率低,因此在實際應(yīng)用中不采用這種方法,在軟件開發(fā)中也不可行,適合個人使用或做演示用。 第2頁/共46頁第二頁,編輯于星期日:七點 二十九分。3Matlab自帶的Matlab Compiler Matlab Compiler的作用是將m文件轉(zhuǎn)化成C/C+代碼(也就是通常所用的mcc命令),這種源代碼需要用C/C+編譯器編譯連接成獨立應(yīng)用程序,在將m文件轉(zhuǎn)成獨立應(yīng)用程
3、序的過程中生成的C/C+文件,原則上是可以被其它的C/C+代碼調(diào)用的,編譯器可以通過設(shè)置mcc命令的選項,將m文件編譯成動態(tài)鏈接庫文件、C/C+文件、可執(zhí)行文件等一系列文件。到matlab R12.1為止,Matlab Compiler的m程序轉(zhuǎn)換成C/C+代碼功能有很多限制: 1. 不能轉(zhuǎn)換腳本m文件,只能轉(zhuǎn)換m函數(shù); 2. 不能使用matlab對象; 3. 不能用input或者eval操作matlab空間變量; 4. 不能動態(tài)地命名變量,然后用load或者save命令來操作; 5.不能處理具有嵌套調(diào)用其他m文件的m文件; 6. 不能使用MATLAB內(nèi)聯(lián)函數(shù);第3頁/共46頁第三頁,編輯于星
4、期日:七點 二十九分。41、必須保證編譯器的正確配置,因為編譯器使用了CC+庫函數(shù),所以在使用前需要使用mex -setup 和mbuild -setup兩個命令對編譯器進(jìn)行配置,如果以前已經(jīng)進(jìn)行了配置就不需要這一步。動態(tài)鏈接庫方式第4頁/共46頁第四頁,編輯于星期日:七點 二十九分。5mbuild -setup第5頁/共46頁第五頁,編輯于星期日:七點 二十九分。6第6頁/共46頁第六頁,編輯于星期日:七點 二十九分。72、設(shè)置頭文件和庫文件的路徑,配置完成如圖1和圖2 第7頁/共46頁第七頁,編輯于星期日:七點 二十九分。83、在MATLAB打開文本編輯器(File-New-M-file)
5、寫一個簡單的m函數(shù): function y=huatu_test() x=-10:0.1:10; y=sin(x); plot(x,y,*) 文件保存為huatu_test.m。 4、在MATLAB命令窗口用如下命令生成dll文件和調(diào)用dll所需要的文件: mcc -t -W libhg:dlltest -T link:lib -h libmmfile.mlib huatu_test.m 生成的文件將會保存在當(dāng)前目錄下,默認(rèn)的當(dāng)前目錄為:MATLAB根目錄work,找到dlltest.h 、dlltest.lib和dlltest.dll文件,這三個文件是我們需要的。5、在VC中新建一個名為ce
6、shi基于對話框的工程,在工程中添加一個名為測試的button按鈕。將dlltest.h 、dlltest.lib和dlltest.dll文件拷貝到當(dāng)前工程目錄下,并通過Project-Add To Project-Files 選擇拷貝到當(dāng)前目錄下的三個文件,將文件引入工程。 第8頁/共46頁第八頁,編輯于星期日:七點 二十九分。96、在ceshiDlg.cpp文件中添加頭文件dlltest.h #include dlltest.h 打開dlltest.h文件,里面有有關(guān)函數(shù)的定義,找到其中三個函數(shù): extern mxArray * mlfHuatu_test(void); extern v
7、oid dlltestInitialize(void); extern void dlltestTerminate(void); 從函數(shù)意思不難知道它們的作用,dlltestInitialize用來初始化dll庫,dlltestTerminate用來結(jié)束調(diào)用dll,mlfHuatu_test為主程序執(zhí)行函數(shù)。將三個函數(shù)拷貝到button響應(yīng)代碼中,進(jìn)行修改: void CCeshiDlg:OnButton1() dlltestInitialize(); mlfHuatu_test(); dlltestTerminate(); 第9頁/共46頁第九頁,編輯于星期日:七點 二十九分。10編譯、執(zhí)行
8、程序,點擊結(jié)果如圖 第10頁/共46頁第十頁,編輯于星期日:七點 二十九分。11可以看出,相比VC編寫dll文件,利用MATLAB 編譯器生成dll文件,以及在VC中調(diào)用該dll文件要方便和簡單的多。利用編譯器還可以根據(jù)需要生成CC+源文件,可執(zhí)行文件等。MATLAB6.5的編譯器為3.0版本,MATLAB7.0的編譯器為4.0版本,4.0版本的編譯器對原編譯器進(jìn)行了很多改進(jìn),3.0很多方法都不再使用,上述方法如果在7.0版本上使用會出現(xiàn)錯誤。 利用mcc命令,通過不同的參數(shù)設(shè)置可以生成不同的文件,例如:mcc -B sgl myfun 將myfun.m文件生成對應(yīng)的c文件和使用c圖形庫的可執(zhí)
9、行程序 mcc -B sglcpp myfun 將myfun.m文件生成相應(yīng)的c+文件和使用c+圖形庫的可執(zhí)行程序 (如果自己編寫的程序圖形不能顯示菜單欄和工具欄,拷貝文件夾bin到當(dāng)前目錄下)第11頁/共46頁第十一頁,編輯于星期日:七點 二十九分。12利用編譯器將m文件轉(zhuǎn)換成對應(yīng)的CC+文件,并在VC中調(diào)用 首先要保證編譯器設(shè)置正確,編譯器的設(shè)置可以參考前面兩節(jié)的內(nèi)容。如果以前已經(jīng)進(jìn)行了配置就不需要這一步。1、在MATLAB中編寫如下函數(shù): function x=gjfcz(A,b) %A=-1.5 1 2; 4 2 3 ; -3 2 8 %b=3;5;6 x=Ab 保存名為gjfcz.m
10、,該函數(shù)的功能為求解線形方程組。2、在MATLAB的命令窗口輸入以下命令:mcc -m gjfcz.m該命令用來生成對應(yīng)的C文件和可執(zhí)行程序。在MATLAB工作目錄下(一般是MATLABwork)將會生成如下文件:gjfcz.exe,gjfcz.c,gjfcz.h,gjfcz_main.c,其中g(shù)jfcz.c,gjfcz.h是我們需要的文件。第12頁/共46頁第十二頁,編輯于星期日:七點 二十九分。13Matcom 簡介這是個第三方控件,很小(8M多),原本屬于mathtool公司,后來被Mathworks公司合并了,使用該工具可以將m腳本文件和m函數(shù)轉(zhuǎn)化成相同功能的CC+文件,相比其它方法使
11、用matcom具有如下優(yōu)點: 1. 轉(zhuǎn)換過程簡單(由matcom工具自動實現(xiàn)),容易實現(xiàn); 2. 可以方便的生成動態(tài)鏈接庫文件(dll)和可執(zhí)行文件(exe); 3. 不僅可以轉(zhuǎn)換獨立的腳本文件,也可以轉(zhuǎn)換嵌套腳本文件; 4. 設(shè)置環(huán)境后,可以使用Matlab的工具箱函數(shù); 但matcom也有以下不足: 1.對struct等類的支持有缺陷,對class數(shù)據(jù)類型; 2. 部分繪圖語句無法實現(xiàn)或得不到準(zhǔn)確圖象,尤其是三維圖象;第13頁/共46頁第十三頁,編輯于星期日:七點 二十九分。14相比Matlab自帶的編譯器Compiler,用Matcom轉(zhuǎn)化代碼要簡單和方便得多。本節(jié)將以VC6.0和Mat
12、com為例,詳細(xì)介紹如何利用Matcom進(jìn)行VC與Matlab的聯(lián)合編程。 Matcom 簡介第14頁/共46頁第十四頁,編輯于星期日:七點 二十九分。15Matcom安裝 安裝Matcom前要已求安裝VC6.0。 Matcom可以獨立于Matlab運行,但需要外部的C+編譯器,在安裝時指定Matlab的位置是為了讓編譯文件中需要的一些系統(tǒng)函數(shù)找到路徑。第15頁/共46頁第十五頁,編輯于星期日:七點 二十九分。16安裝完成后,啟動界面MIDEVA(下圖)。MIDEVA集成開發(fā)環(huán)境包括命令行窗口、變量列表窗口、命令列表窗口和編譯鏈接信息窗口等幾部分,并有詳細(xì)的幫助文檔 第16頁/共46頁第十六頁
13、,編輯于星期日:七點 二十九分。17Matcom命令輸入方法與Matlab相同。如果安裝在中文版操作系統(tǒng)時,輸入命令前加一空格。(下圖)第17頁/共46頁第十七頁,編輯于星期日:七點 二十九分。18m文件編譯后放入VC中 1、啟動MIDEVA ,File-New,新建如下Test1.m文件:x=1:0.1:10; y=sin(x); plot(x,y); 將文件保存(如下圖)。m文件保存的默認(rèn)位置為:matcom安裝目錄matcom45,生成的C+文件保存的默認(rèn)位置為:matcom安裝目錄matcom45Debug,本例matcom安裝目錄為C盤 即 C:matcom45Debug,在該目錄下
14、將會產(chǎn)生Test1.h、Test1.cpp、Test1.r 、Test1.obj文件。 第18頁/共46頁第十八頁,編輯于星期日:七點 二十九分。192、在VC中用MFC Wizard(exe)創(chuàng)建一個基于對話框名為Example的工程。在面板上添加一個ID為IDC_BUTTON1按扭。3、將C:matcom45Debug目錄下的Test1.cpp文件的內(nèi)容拷貝到void CExamleDlg:OnButton1()下第19頁/共46頁第十九頁,編輯于星期日:七點 二十九分。204、將C:matcom45lib下的matlib.h 和v4501v.lib文件和C:matcom45debug下的
15、Test1.h文件拷貝到工程Example目錄下,然后在VC中將庫文件和頭文件加入到工程中:工程-添加工程-Files,選擇剛剛拷貝到Example目錄下的matlib.h 、v4501v.lib和Test1.h文件 第20頁/共46頁第二十頁,編輯于星期日:七點 二十九分。215、在ExamleDlg.cpp中加入如下代碼:#include matlib.h #include Test1.h 6、在void CExamleDlg:OnButton1()中分別添加一個初始化類庫調(diào)用函數(shù)”initM(MATCOM_VERSION)”和一個結(jié)束類庫調(diào)用函數(shù)”exitM()” 第21頁/共46頁第二
16、十一頁,編輯于星期日:七點 二十九分。22運行程序,點擊畫圖按扭 程序的release版本需要ago4501.dll、v4501v.dll、v4501.lib三個文件的支持。 第22頁/共46頁第二十二頁,編輯于星期日:七點 二十九分。23在VC中調(diào)用matcom編譯后的函數(shù) 首先新建一個函數(shù)huatu.m,該函數(shù)的功能是:接受用戶輸入的左端點值和右端點值兩個輸入?yún)?shù),然后在該區(qū)間畫正弦圖形。函數(shù)還將生成兩個隨機(jī)數(shù),作為一個點的坐標(biāo)在圖中打印出來(綠點),用來說明如何在VC中處理調(diào)用函數(shù)的返回值。 第23頁/共46頁第二十三頁,編輯于星期日:七點 二十九分。241建立一個名為Example2基
17、于對話框的MFC(exe)工程。2在matcom中新建一個名為huatu.m文件 第24頁/共46頁第二十四頁,編輯于星期日:七點 二十九分。253.在matcom命令窗口中運行該函數(shù) 第25頁/共46頁第二十五頁,編輯于星期日:七點 二十九分。264將生成的huatu.h、huatu.cpp(默認(rèn)位置為 安裝目錄:matcom45samplesDebug)和matlib.h、v4501v.lib(默認(rèn)位置為 安裝目錄:matcom45lib)四個文件拷貝到建立的工程Example2目錄下。5將第四步拷貝的四個文件加入到VC工程中:工程-添加工程-文件,選擇剛才拷貝到Example2目錄下的四
18、個文件。完成后如圖 第26頁/共46頁第二十六頁,編輯于星期日:七點 二十九分。276在Example2dlg.cpp中添加頭文件:#include matlib.h #include huatu.h 第27頁/共46頁第二十七頁,編輯于星期日:七點 二十九分。287為工程建立界面:添加一個Button按扭控件;添加四個Edit box控件,用于顯示數(shù)據(jù);添加五個Static text控件,四個顯示文字,一個顯示圖形,將顯示圖形的Static text的ID設(shè)置為ID_PIC。其他所有控件屬性保持默認(rèn) 第28頁/共46頁第二十八頁,編輯于星期日:七點 二十九分。298按Ctrl+W為控件添加變
19、量。 第29頁/共46頁第二十九頁,編輯于星期日:七點 二十九分。309為Button1按鈕添加響應(yīng)代碼。 第30頁/共46頁第三十頁,編輯于星期日:七點 二十九分。3110運行程序,輸入左端點和右端點,點擊”畫圖”按鈕,結(jié)果如圖 第31頁/共46頁第三十一頁,編輯于星期日:七點 二十九分。32注:如果在編譯中出現(xiàn)下列錯誤:fatal error C1010: unexpected end of file while looking for precompiled header directive 進(jìn)行下列設(shè)置:工程-設(shè)置- C/C+ 選擇precompiled headers 選擇第一或第二
20、項:自動選擇預(yù)補(bǔ)償頁眉,如圖第32頁/共46頁第三十二頁,編輯于星期日:七點 二十九分。33COM接口方法 COM是component object module的簡稱,它是一種通用的對象接口,任何語言只要按照這種接口標(biāo)準(zhǔn),就可以實現(xiàn)調(diào)用它。matlab6.5新推出來的combuilder就是把用matlab編寫的程序做成com組件,供其他語言調(diào)用。該方法實現(xiàn)簡單,通用性強(qiáng),而且?guī)缀蹩梢允褂肕atlab的任何函數(shù)(注意:不支持腳本文件,腳本文件使用時要改為函數(shù)文件),因此在程序較大、調(diào)用工具箱函數(shù)或調(diào)用函數(shù)較多時推薦使用,這也是Matlab公司(Matlab公司就是Mathworks公司)推薦
21、的使用方法。 第33頁/共46頁第三十三頁,編輯于星期日:七點 二十九分。341:在Matlab編輯器里編輯m函數(shù)文件:啟動matlab-File-New-M-file 函數(shù)內(nèi)容如圖:該函數(shù)無輸入輸出參數(shù),文件保存為huatu.m 第34頁/共46頁第三十四頁,編輯于星期日:七點 二十九分。35在matlab下建立COM組件,步驟如下: 1、在matlab command window 輸入如下命令: comtool 出現(xiàn)com編輯界面,如圖 第35頁/共46頁第三十五頁,編輯于星期日:七點 二十九分。362、新建工程:File-New Project,如圖(左) 3、設(shè)置組件屬性,在“Com
22、ponent name”項中填寫組件名稱“component”,這時候會自動生成類“component”,在“Class name”項中填寫類名稱“huatu”,如圖(右)第36頁/共46頁第三十六頁,編輯于星期日:七點 二十九分。37為了便于區(qū)分,選中Classes中的component,點擊“remove”按鈕,將類component移除,再點擊Add添加新類huatu,結(jié)果如圖5。點擊OK,接下來出現(xiàn)一個對話框,選擇Yes. 第37頁/共46頁第三十七頁,編輯于星期日:七點 二十九分。384. 添加文件:選中左邊工作區(qū)的huatu,點擊Project-Add File,選擇已經(jīng)編輯好的函
23、數(shù)文件huatu.m,如圖6。需要注意的是m文件必須是m函數(shù),否則會報錯,如果是m腳本文件的話,只需要改為無輸入輸出參數(shù)的m函數(shù)即可。 第38頁/共46頁第三十八頁,編輯于星期日:七點 二十九分。395、生成 com組件:點擊Build-COM Object,結(jié)果如圖 第39頁/共46頁第三十九頁,編輯于星期日:七點 二十九分。40com組件已經(jīng)由matlab做好,默認(rèn)的保存位置為:matlab安裝位置workcomponent。 VC中調(diào)用COM組件,步驟如下: 1、在VC中建立名為ComHuaTu的基于對話框的MFC(exe)。 2、面板上添加一個名為“畫圖”的button按鈕,如圖 第40頁/共46頁第四十頁,編輯于星期日:七點 二十九分。413、將component_idl.h 和component_idl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024新疆二手房買賣合同模板:包含房屋質(zhì)量及安全隱患排查3篇
- 2024影樓與攝影師違約責(zé)任及賠償合同范本3篇
- 2024智能化設(shè)計合同范本
- 23《童年的發(fā)現(xiàn)》說課稿2023-2024學(xué)年統(tǒng)編版語文五年級下冊
- 2 丁香結(jié) 說課稿-2024-2025學(xué)年統(tǒng)編版語文六年級上冊
- 專業(yè)餐飲顧問服務(wù)合同(2024年修訂)版
- 2024跨境電子商務(wù)平臺搭建與運營服務(wù)合同
- 職業(yè)學(xué)生退宿申請表
- 2024年簡化版勞務(wù)協(xié)議格式
- 福建省南平市吳屯中學(xué)2021年高二化學(xué)上學(xué)期期末試卷含解析
- 《三本白皮書》全文內(nèi)容及應(yīng)知應(yīng)會知識點
- 藝術(shù)漆培訓(xùn)課件
- 專題14 思想方法專題:線段與角計算中的思想方法壓軸題四種模型全攻略(解析版)
- 建德海螺二期施工組織設(shè)計
- 山東省菏澤市2023-2024學(xué)年高一上學(xué)期期末測試物理試題(解析版)
- 2024年學(xué)校后勤日用品采購合同范本2篇
- 中建中建機(jī)電工程聯(lián)動調(diào)試實施方案范本
- 上海教育出版社 藝術(shù) 八年級上冊第三單元 鄉(xiāng)音鄉(xiāng)韻 京腔京韻系鄉(xiāng)情 教學(xué)設(shè)計
- 人教版(2024新教材)七年級上冊數(shù)學(xué)第一章《有理數(shù)》單元測試卷(含答案)
- 商業(yè)倫理與企業(yè)社會責(zé)任(山東財經(jīng)大學(xué))智慧樹知到期末考試答案章節(jié)答案2024年山東財經(jīng)大學(xué)
- (正式版)QBT 8006-2024 年糕 標(biāo)準(zhǔn)
評論
0/150
提交評論