![matlab生成dll方法的心得體會(huì)_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/23/1416edef-8e88-47f9-bd42-5004b72bfaaa/1416edef-8e88-47f9-bd42-5004b72bfaaa1.gif)
![matlab生成dll方法的心得體會(huì)_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/23/1416edef-8e88-47f9-bd42-5004b72bfaaa/1416edef-8e88-47f9-bd42-5004b72bfaaa2.gif)
![matlab生成dll方法的心得體會(huì)_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-10/23/1416edef-8e88-47f9-bd42-5004b72bfaaa/1416edef-8e88-47f9-bd42-5004b72bfaaa3.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、將 MATLAB 函數(shù)編譯成 dll 供 VC 調(diào)用的方法1 簡介1.1 MATLAB 簡介MATLAB 名字是由 MATrix 和 LABoratory 兩詞的前三個(gè)字母組合而成。 是美國新墨西哥大學(xué)計(jì)算機(jī)科學(xué)系主任的 Cleve Moler 教授出于減輕學(xué)生編程負(fù) 擔(dān)的動(dòng)機(jī),為學(xué)生設(shè)計(jì)了一組調(diào)用 LINPACK 和 EISPACK 庫程序的“通俗易用” 的接口,此即用 FORTRAN 編寫的萌芽狀態(tài)的 MATLAB 。經(jīng)幾年的校際流傳,在 Little 的推動(dòng)下,由 Little 、Moler 、Steve Bangert 合 作,于 1984年成立了 MathWorks 公司,并把 MA
2、TLAB 正式推向市場。目前, MATLAB 己經(jīng)成為應(yīng)用最廣泛的科學(xué)工程計(jì)算軟件,它廣泛的應(yīng)用 于自動(dòng)控制、數(shù)學(xué)運(yùn)算、信號(hào)分析、圖象處理、財(cái)務(wù)分析等各行各業(yè)。 用 MATLAB 編寫的數(shù)學(xué)運(yùn)算及圖像處理等程序十分簡單, 在 MATLAB 里有大量的 MATLAB 庫函數(shù),包括初等數(shù)學(xué)函數(shù)、線形代數(shù)函數(shù)、矩陣操作函數(shù)、數(shù)值計(jì)算函數(shù)、特 殊數(shù)學(xué)函數(shù)、插值函數(shù)等等, 還可以利用 MATLAB 的編譯工具將 m 文件方便的 轉(zhuǎn)化為 CC+語言、可執(zhí)行程序 (exe)、動(dòng)態(tài)連接庫文件 (dll) 、COM 組件等等, 并可直接供 CC+ 語言調(diào)用。為什么要用 VC 與 MATLAB 接口?既然 MAT
3、LAB 擁有強(qiáng)大的數(shù)值計(jì)算功能,利用 VC 與 MATLAB 接口可以 充分發(fā)揮它的數(shù)值計(jì)算功能,并且可以不依賴 MATLAB 軟件運(yùn)行,在 VC 下做 出漂亮的界面,把復(fù)雜的數(shù)據(jù)處理交給 MATLAB 去做。1.2 MATLAB 函數(shù)編譯為 dll 與 VC之間的通訊方式1、使用自帶的 MATLAB Compiler2、使用 MATcom 工具3、在 MATLAB 下做 com 組件,在 VC中調(diào)用 com組件( 出現(xiàn)了點(diǎn)問題,目 前還沒找到解決方法,這種方法在 m文件較大、用 matcom、調(diào)用 math library 或使用 mcc方式無法實(shí)現(xiàn)的時(shí)候,推薦使用 )2 使用 Matcom
4、 工具2.1 MATcom 簡介MATcom 是 MATHworks 公司推出的第一個(gè)由 MATLAB 到 C+ 的編譯開發(fā)軟件平臺(tái),其最新版本為 4.5,集成調(diào)試編譯環(huán)境為 MIDEVA 。這個(gè)軟件可厲害了,他生成的 exe 可執(zhí)行文件可以在沒有安裝 MATLAB 的 地方運(yùn)行,只是需要幾個(gè) dll 文件而已。如果用 MATLAB 的 Deployment Tool 來生成的 exe 可執(zhí)行文件,在沒有安裝 MATLAB 的機(jī)子上運(yùn)行時(shí)需要安裝 MCR , 而 MCR 現(xiàn)在有 200M 多,所以很不方便。通過 MATcom 連接 MATLAB m 文件 有以下三種方法:(1)經(jīng)過簡單的設(shè)置,
5、由 MIDEVA 將 m 源文件轉(zhuǎn)換為 C/C+ ,然后添加 到 VC 工程中。(2)由 MIDEVA 直接生成 EXE 文件,然后在 VC 中通過 Shell 調(diào)用。 這種 方法簡單方便,但運(yùn)行時(shí)出現(xiàn)一個(gè)控制臺(tái)窗口,而且由于 VC 和 MATLAB 之間 不能交互,通用性差,僅適用于 VC 調(diào)用 MATLAB 實(shí)現(xiàn)圖形顯示的場合。(3)通過 Visual MATcom 工具條,使用 Add-in ,這種方法提供了 MATLAB和 VC 直接集成的途徑,且可快速集成 m 文件到 VC 工程中創(chuàng)建獨(dú)立的 C/C+ 應(yīng)用程序、 C MEX DLL ,在調(diào)試過程中可以查看矩陣變量的值,可直接修改m源
6、文件而不是修改生成的 C/C+ 文件2.2 MATcom 的安裝a)安 裝 之 前 , 首 先 在 matlab 的 安 裝 目 錄 下 建 立 文 件 夾 : MATLAB7.0bintoolboxmatlabgeneral 。 matcom4.5 在安裝時(shí)需要你輸入口令, Matcom4.5 的口令為 FREE-4.5-1193046-80295111。b)之后啟動(dòng) MATLAB ,運(yùn)行以下命令:cd c:matcom45 % MATcom 的安裝路徑diary mpath matlabpath diary offc) 復(fù) 制 %MATcom45%binusertype.dat 文 件到
7、%VC%CommonMSDev98bin 目錄。d) 運(yùn)行 Visual C+ ,并從菜單中選擇 Tools-Customize-Add-ins and Macro Files , 選 擇 Browse , 改 變 文 件 類 型 為 Add-in(.dll) , 選 擇 %MATcom45%binmvcide.dll 文件,確定。e) 在 Visual C+ 的開發(fā)環(huán)境中可以看到一個(gè) Visual MATcom 工具條,安裝 成功。2.3 Matcom 的工作原理Matcom 編譯 .m 文件是先將 .m 文件按照與 Matcom 的 Cpp 庫的對應(yīng)關(guān)系, 翻譯為 CPP 源代碼,然后用對
8、應(yīng)版本的 C 編譯器將該 CPP 文件編譯為 exe 或 dll 文件,所以,在第一次運(yùn)行時(shí)讓指定 C Complier 的路徑是必需的,否則將無 法編譯。指定好的 C Complier 的信息寫在 Matcom/bin/matcom.ini 文件中。但 也有不足之處:比如,對 struct 等類的支持有缺陷,部分繪圖語句無法實(shí)現(xiàn)或得 不到準(zhǔn)確圖象,尤其是三維圖象。2.4 使用 Matcom將 .m 文件翻譯為 C+文件a) 在 MIDEVA 下新建一個(gè) .m 文件function Test1()x=-10:0.1:10;y=sin(x);plot(x,y);在 matcom安裝路徑 Debu
9、g 文件夾下將會(huì)產(chǎn)生以下文件: 從這里可以看出, MIDEVA己經(jīng)將.m 文件轉(zhuǎn)化成 c+代碼,放在 Test1.cpp 中。b) 在 VC中用 MFC Wizard(exe) 創(chuàng)建一個(gè)基于對話框名為 Example的工程。 在面板上添加一個(gè) ID 為 IDC_BUTTON按1 扭。c) 將 C:matcom45Debug目 錄 下 的 Test1.cpp 文 件 的 內(nèi) 容 拷 貝 到d) 將 下的 matlib.h 和 v4501v 文件和 C:matcom45debug 下的 Test1.h文件拷貝到工程 Example 目錄下,然后在 VC中將庫文件和頭文件加 入到工程中:工程 - 添
10、加工程 -Files, 選擇剛剛拷貝到 Example 目錄下的 matlib.h 、 v4501v 和 Test1.h 文件。f)e) 在 ExampleDlg.cpp 中加入如下代碼:#include matlib.h#include Test1.h2.5 使用 Matcom工具編譯為 dll 文件供 VC調(diào)用在 MIDEVA 中新建一個(gè) .m 文件,然后將其編譯為 .dll 文件,新建工程, File-New Project設(shè)置組件屬性,在 Component name 項(xiàng)中填寫組件名稱 component, 這時(shí) 候會(huì)自動(dòng)生成類 component, 在Class name 項(xiàng)中填寫類
11、名稱 huatu ,為了便于區(qū)分 ,選中Classes 中的component, 點(diǎn)擊“ remove ”按鈕,將類 component 移除,再點(diǎn)擊 Add 添加新類 huatu, 結(jié)果如圖 5。點(diǎn)擊OK ,接下 來出現(xiàn)一個(gè)對話框,選擇 Yes.添加文件:選中左邊工作區(qū)的 huatu, 點(diǎn)擊 Project-Add File ,選擇已經(jīng) 編輯好的函數(shù)文件 huatu.m,如圖所示。需要注意的是 m 文件必須是 m函數(shù),否則 會(huì)報(bào)錯(cuò),如果是 m腳本文件的話 ,只需要改為無輸入輸出參數(shù)的 m函數(shù)即可。生成 com 組件 : 點(diǎn)擊 Build-COM Object ,在這里出現(xiàn)了點(diǎn)問題,目前還不知
12、道解決辦法生成 com 組件 : 點(diǎn)擊 Build-COM Object ,在這里出現(xiàn)了點(diǎn)問題,目前還 不知道解決辦法。3 使用 MATLAB自 帶的 Matlab CompilerMATLAB Compiler 是 MATLAB 自帶的一個(gè)編譯器,它能將 m文件轉(zhuǎn)化成 C、C+或 p 等各種類型的源代碼,并根據(jù)需要生成可執(zhí)行文件、 lib 文件(庫文 件)、 dll 文件或 S函數(shù)文件等。 Matlab 所使用的編譯器包括了 MATLAB 的 CC+數(shù)學(xué)庫函數(shù)以及圖形庫。必須保證編譯器的正確配置,因?yàn)榫幾g器使用了 CC+庫函數(shù),所以在使用 前需要使用 mex -setup 和 mbuild
13、-setup 兩個(gè)命令對編譯器進(jìn)行配置。步驟 如下:1. 設(shè)置 Matlab 的編譯器,使用外部的 VC 或者 gcc 等編譯器。2. 編譯 m 文件成 dll3. 設(shè)置 VC 等的繼承環(huán)境,設(shè)置 C 需要用到的靜態(tài)庫和動(dòng)態(tài)庫4. 編寫 C 調(diào)用 dll3.1 設(shè)置 Matlab 編譯器首先要安裝 Matlab 編譯器,一般來說,在安裝了 Matlab 后編譯器就己經(jīng) 安裝了,所在就只需要對 Matlab 編譯器進(jìn)行設(shè)置。3.1.1 編譯環(huán)境設(shè)置首先設(shè)置系統(tǒng)的環(huán)境變量, 點(diǎn)擊“我的電腦”屬性- 系統(tǒng)特性 - 高級(jí)- 環(huán) 境 變 量 - 添 加 系 統(tǒng) 變 量 Matlab 值 為 Matlab
14、 的 安 裝 路 徑 : G:matlab7.0binwin32 ,重啟電腦即可。3.1.2 Matlab7.0編譯器設(shè)置(a) 為編譯后產(chǎn)生的 MEX 文件進(jìn)行預(yù)配置運(yùn)行 Matlab ,在 Matlab 的命令窗口 (Command Window) 鍵入“ mex -setup ”命令后,按回車鍵,安裝 Matlab 編譯器;(b) 為產(chǎn)生獨(dú)立外部應(yīng)用程序進(jìn)行預(yù)配置對 Matlab 編譯器 mbuild 應(yīng)用程序進(jìn)行設(shè)置, 運(yùn)行 Matlab ,在 Matlab 的 命令窗口 (Command Window) 鍵入“ mbuild -setup ”命令后,按回車鍵, 安裝 Matlab 編
15、譯器;編寫 Matlab 文件 huatu_test.m ,一個(gè)很簡單的程序,function X1,Y1=huatu_test(x1,x2) x=x1:0.1:x2;y=sin(x); X1=rand(1); Y1=rand(1); plot(x,y,X1,Y1,*);end3.2 將 Matlab 函數(shù)轉(zhuǎn)成 dll 函數(shù)在 Matlab 的 Command Window / 下輸入命令: 命令 1 : mcc -W lib:dlltest -T link:lib huatu_test.m 或命令 2 : mcc -W cpplib: dlltest -T link:lib huatu_te
16、st.m其中, mcc是 matlab 提供的編譯命令(可以理解為 gcc),對于這一點(diǎn), matlab 的幫助說明如下:-W lib:string link:lib其中 -W是控制編譯之后的封裝格式, cpplib ,是指編譯成 C+的 lib ,cpplib 冒號(hào)后面是指編譯的庫的名字, -T 表示目標(biāo), link:lib 表示要連接到一個(gè)庫文 件的目標(biāo),目標(biāo)的名字是后面的你寫的 m函數(shù)的名字。生成的文件將會(huì)保存在當(dāng)前目錄下,默認(rèn)的當(dāng)前目錄為:MATLAB根目錄work ,找到 dlltest.h 、 dlltest.lib和 dlltest.dll 文件,這三個(gè)文件是我們需要的。3.3
17、M 函數(shù)文件編譯成 DLL文件問題解決1 、 Warning: No matching builtin function available for C:MATLAB6.5toolboxsimulinksimulinkset_param.bi 解決方法:1) 將 MATLAB6.5toolboxcompilerdeploymatlabrc.m 中的81 行 set_param(0,PaperType,defaultpaper);82 行 set_param(0,PaperUnits,defaultunits); 注釋掉,或者干脆刪掉。2) 在 Matlab6.5 的命令窗口運(yùn)行 rehash
18、toolboxcache3) 重新編譯文件后即可運(yùn)行。2、mbuild setup 的錯(cuò)誤Error: Could not find the compiler “cl ”on the DOS path , use mbuild to configure your environment properly.由于 VC 安裝有誤而導(dǎo)致此錯(cuò)誤, 在安裝時(shí)必須選擇默認(rèn)路徑, 否則 matlab 檢測不到 VC 編譯器的物理位置3.4 dll 文件載入在 VC 中新建一個(gè)名為 ceshi 基于對話框的工程,在工程中添加一個(gè)名為 測試 的 button 按鈕。將 dlltest.h 、dlltest.li
19、b 和 dlltest.dll 文件拷貝到當(dāng)前工程 目錄下,并通過 Project-Add To Project-Files 選擇拷貝到當(dāng)前目錄下的三個(gè) 文件,將文件引入工程。在 ceshiDlg.cpp 文件中添加頭文件 dlltest.h#include dlltest.h打開 dlltest.h 文件,里面有有關(guān)函數(shù)的定義,找到其中三個(gè)函數(shù):extern mxArray * mlfHuatu_test(void);extern void dlltestInitialize(void);extern void dlltestTerminate(void);從函數(shù)意思不難知道它們的作用, dlltestInitialize 用來初始化 dll 庫, dlltestTerminate用來結(jié)束調(diào)用 dll, mlfHuatu_test 為主程序執(zhí)行函數(shù)。將三個(gè)函數(shù) 拷貝到 button 響應(yīng)代碼中,進(jìn)行修改:void CCeshiDlg:OnButton1()dlltestInit
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度化工廠土地廠房租賃及環(huán)保設(shè)施建設(shè)合同
- 2025年度婚生女撫養(yǎng)權(quán)爭議調(diào)解及財(cái)產(chǎn)分割協(xié)議-@-1
- 2025年度酒店品牌連鎖店擴(kuò)張合作協(xié)議
- 2025年度農(nóng)產(chǎn)品冷鏈物流購銷合同質(zhì)量保障與運(yùn)輸安全協(xié)議
- 門窗相關(guān)行業(yè)投資規(guī)劃報(bào)告范本
- 禮品申請書范文
- 2025年度高效國內(nèi)貨物公路運(yùn)輸合同標(biāo)準(zhǔn)文本
- 2025年度臨時(shí)工社會(huì)保險(xiǎn)繳納管理協(xié)議
- 房地產(chǎn)行業(yè)的政策變動(dòng)與未來影響
- 2025年度智慧城市建設(shè)項(xiàng)目勞務(wù)派遣服務(wù)合同
- 分享二手房中介公司的薪酬獎(jiǎng)勵(lì)制度
- 安徽省2022年中考道德與法治真題試卷(含答案)
- GB 4793-2024測量、控制和實(shí)驗(yàn)室用電氣設(shè)備安全技術(shù)規(guī)范
- 廣電雙向網(wǎng)改造技術(shù)建議書
- 項(xiàng)目人員管理方案
- 重大火災(zāi)隱患判定方法
- 2024年電工(高級(jí)技師)考前必刷必練題庫500題(含真題、必會(huì)題)
- 《證券投資學(xué)》全套教學(xué)課件
- 2024年全國各地中考語文試題匯編:名著閱讀
- 公司組織架構(gòu)與管理體系制度
- 2024-2030年中國涂碳箔行業(yè)現(xiàn)狀調(diào)查與投資策略分析研究報(bào)告
評論
0/150
提交評論