下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、VC+與 Matlab 混 合 編 程 的 快 速 實(shí) 現(xiàn) 劉 建 偉 吉 林 大 學(xué) 朝 陽 校 區(qū) 電 子 科 學(xué) 與 工 程 學(xué) 院 電 子 信 息 工 程 系 ( 長 春 ) 摘 要 : 許 多 工 程 軟 件 需 要 用 到 復(fù) 雜 的 數(shù) 學(xué) 算 法 。 VC+能 夠 形 成 各 種 用 戶 界 面 , 并 可 以 直接 與 系 統(tǒng) 及 底 層 硬 件 交 換 數(shù) 據(jù) 。 因 此 研 究 VC+和 Matlab 的 混 合 編 程 具 有 很 大 的 實(shí) 際 意 義 。 該 文 討 論 了 如 何 使 用 Matlab 的 Complier 將 *.m 函 數(shù) 編 譯 為 動(dòng) 態(tài)
2、鏈 接 庫 DLL, 提 供 給 VC+ 調(diào) 用 的 方 法 , 提 供 了 一 種 VC+與 Matlab 混 合 編 程 的 快 速 實(shí) 現(xiàn) 。 關(guān) 鍵 詞 : Matlab VC+ MCC Complier 動(dòng) 態(tài) 鏈 接 庫 DLL Matlab 作 為 當(dāng) 今 世 界 上 應(yīng) 用 最 為 廣 泛 的 數(shù) 學(xué) 軟 件 , 具 有 非 常 強(qiáng) 大 的 數(shù) 值 計(jì) 算 、 數(shù) 據(jù) 分析 處 理 、 系 統(tǒng) 分 析 、 圖 形 顯 示 甚 至 符 號(hào) 運(yùn) 算 的 功 能 。 已 經(jīng) 在 如 生 物 工 程 , 圖 像 處 理 , 語 音 處理 , 雷 達(dá) 探 空 , 聲 納 探 水 , 地
3、震 探 地 , 以 及 控 制 論 , 系 統(tǒng) 論 等 各 個(gè) 領(lǐng) 域 得 到 廣 泛 的 應(yīng) 用 。 它是 一 個(gè) 完 整 的 數(shù) 學(xué) 平 臺(tái) ,在 這 個(gè) 平 臺(tái) 上 ,用 戶 只 需 寥 寥 數(shù) 語 就 可 以 完 成 十 分 復(fù) 雜 的 功 能 ,大大 提 高 了 工 程 分 析 計(jì) 算 、 圖 像 處 理 的 效 率 。 但 是 Matlab 強(qiáng) 大 的 功 能 只 能 在 它 所 提 供 的 平 臺(tái)上 才 能 使 用 , 即 用 戶 必 須 在 安 裝 Matlab 系 統(tǒng) 的 機(jī) 器 上 才 能 執(zhí) 行 *.m 文 件 。 這 樣 當(dāng) 用 戶 需 要將 在 Matlab 下 已
4、開 發(fā) 完 畢 的 復(fù) 雜 算 法 應(yīng) 用 到 高 級(jí) 語 言 開 發(fā) 環(huán) 境 下 時(shí) 就 帶 來 了 問 題 , 是 將 現(xiàn)成 的 東 西 集 成 高 級(jí) 語 言 開 發(fā) 的 程 序 中 呢 ? 還 是 用 高 級(jí) 語 言 再 重 新 實(shí) 現(xiàn) 一 遍 ? 顯 然 大 家 所 期望 的 是 減 少 工 作 量 , 最 好 能 將 Matlab 下 開 發(fā) 好 的 程 序 或 函 數(shù) 直 接 應(yīng) 用 到 高 級(jí) 語 言 開 發(fā) 的 程序 中 , 這 就 是 Matlab 與 高 級(jí) 語 言 的 混 合 編 程 問 題 。 VC 是 當(dāng) 前 Windows 下 的 主 要 編 程 語 言 之 一
5、, 它 能 方 便 地 形 成 應(yīng) 用 軟 件 中 所 需 要 的各 種 用 戶 界 面 和 工 具 并 直 接 與 系 統(tǒng) 及 底 層 硬 件 交 換 數(shù) 據(jù) 。用 VC+開 發(fā) 的 系 統(tǒng) 具 有 容 易 維 護(hù)升 級(jí) 、 界 面 友 好 、 代 碼 效 率 高 、 執(zhí) 行 速 度 快 等 一 系 列 優(yōu) 點(diǎn) , 因 此 已 成 為 目 前 應(yīng) 用 軟 件 開 發(fā) 中廣 泛 采 用 的 主 要 工 具 之 一 因 此 , 如 何 將 Matlab 與 VC+進(jìn) 行 有 效 的 混 合 編 程 廣 受 工 程 科 研 人 員 的 關(guān) 注 。 解 決 這個(gè) 問 題 , 不 僅 能 更 好 地
6、發(fā) 揮 Matlab 強(qiáng) 大 的 功 能 , 還 能 快 速 地 進(jìn) 行 軟 件 開 發(fā) , 尤 其 是 當(dāng) 軟 件開 發(fā) 中 需 要 實(shí) 現(xiàn) 復(fù) 雜 的 數(shù) 學(xué) 算 法 、圖 形 處 理 時(shí) 尤 為 迫 切 。研 究 VC 與 Matlab 的 混 合 編 程具 有 很 大 的 實(shí) 際 意 義 。 MATLAB 與 Visual C+結(jié) 合 的 方 法 有 多 種 , 但 其 實(shí) 用 程 度 與 范 圍 不 同 。 常 用 的 方 法 有 :( 1) 將 Matlab 程 序 編 譯 成 C/C+源 文 件 并 嵌 入 VC+;( 2) 在 C C+程 序 中 利 用 Matlab engi
7、ne 調(diào) 用 Matlab 函 數(shù) ;( 3)在 C/C+程 序 中 直 接 使 用 Matlab C/C+ Math Library; (4)將 .m 文 件 編 譯 成 *.dll 文 件 嵌 入 到 VC+的 程 序 中 。 基 于 實(shí) 用 性 、 易 用 性 的 考 慮 , 本 文 主 要 討 論 第四 種 方 法 。另 外 隨 著 Matlab 版 本 的 升 級(jí) ,原 來 的 math library 已 經(jīng) 并 入 了 Compiler 之 中 ,是否 是 mathworks 比 較 推 崇 DLL 的 方 式 呢 ? 本 文 通 過 一 個(gè) 簡 單 的 例 子 來 說 明 Ma
8、tlab 和 VC+ 混 編 的 具 體 過 程 ( 環(huán) 境 為 Matlab6.5&VC+6.0)。 1 Matlab 編 譯 環(huán) 境 的 設(shè) 置 為 了 能 夠 使 用 Matlab的 Complier將 *.m函 數(shù) 文 件 編 譯 為 動(dòng) 態(tài) 鏈 接 庫 DLL,必 須 對(duì) Matlab 的 環(huán) 境 做 出 相 應(yīng) 的 配 置 。 具 體 做 法 如 下 : 在 Matlab 的 Command Window 下 輸 入 命 令 mbuild setup,并 根 據(jù) Matlab 的 提 示 選 擇 合適 的 編 譯 器 ,筆 者 使 用 的 是 Microsoft Visual C+
9、.過 程 如 下 mbuild -setup Please choose your compiler for building standalone MATLAB applications: Would you like mbuild to locate installed compilers y/n? Select a compiler: 1 Lcc C version 2.4 in D:MATLAB6P5syslcc 2 Microsoft Visual C/C+ version 7.0 in C:Program FilesMicrosoft Visual Studio .NET 3 Mi
10、crosoft Visual C/C+ version 6.0 in D:Microsoft Visual Studio 0 None Compiler: 3 Please verify your choices: Compiler: Microsoft Visual C/C+ 6.0 Location: D:Microsoft Visual Studio Are these correct?(y/n): 然 后 ,在 Command Window 中 輸 入 命 令 cd(prefdir);mccsavepath;這 是 為 了 后 面 使 用 Matlab 在 VC+ IDE 中 的 Ad
11、d-in 作 準(zhǔn) 備 。 然 后 輸 入 命 令 mex setup, 以 類 似 的 方 法 配置 編 譯 器 。 至 此 , Matlab 的 配 置 完 成 。 如 有 疑 問 , 可 以 參 閱 Matlab 的 幫 助 Matlab CompilerGetting StartedInstallation and configuration 一 節(jié) 。 2 創(chuàng) 建 動(dòng) 態(tài) 鏈 接 庫 ( *.DLL) 創(chuàng) 建 動(dòng) 態(tài) 鏈 接 庫 主 要 有 兩 種 方 法 : 一 種 是 使 用 Matlab 為 VC+ IDE 提 供 的 Add-in。 這種 方 法 比 較 簡 單 ,方 便 快
12、捷 ,只 要 在 VC+中 創(chuàng) 建 工 程 的 時(shí) 候 選 擇 Matlab Project Wizard,并 且 在 接 下 來 的 Step 1 中 的 Visual Matlab Application Type 選 擇 Shared M-DLL 就 可 以了 。 接 下 來 就 是 添 加 *.m 文 件 , 進(jìn) 行 編 譯 了 。 另 一 種 方 法 就 是 使 用 Matlab 的 mcc 命 令將 *.m 文 件 編 譯 為 動(dòng) 態(tài) 鏈 接 庫 ( *.DLL)。 因 為 Add-in 也 是 調(diào) 用 Compiler 的 命 令 mcc 進(jìn)行 編 譯 工 作 的 , 而 且 有
13、 時(shí) 候 這 個(gè) Add-in 還 會(huì) 出 現(xiàn) 不 能 使 用 的 情 況 , 因 此 這 里 主 要 討 論使 用 mcc 命 令 的 方 法 。 關(guān) 于 mcc 有 很 多 參 數(shù) 可 以 使 用 , 而 且 有 多 種 用 法 , 具 體 的 可 以 參 見 Matlab 的 幫 助 。 這 里 我 們 使 用 命 令 mcc B csglsharedlib:youlibname function1 funcion2 來 創(chuàng) 建 我們 所 需 要 的 動(dòng) 態(tài) 鏈 接 庫 DLL 文 件 。 其 中 參 數(shù) -B 表 示 使 用 的 是 Bundle Files 作 為 參 數(shù) , csg
14、lsharedlib 是 -B 的 參 數(shù) , 意 思 是 生 成 使 用 Matlab 圖 形 庫 的 C 共 享 動(dòng) 態(tài) 鏈 接 庫 , youlibname 是 你 想 要 生 成 的 動(dòng) 態(tài) 鏈 接 庫 DLL 的 文 件 名 ,注 意 csglsharedlib 與 youlibname 之 間 有 一 個(gè) 冒 號(hào) “ :” 連 接 , function1 為 你 想 要 加 入 到 動(dòng) 態(tài) 鏈 接 庫 DLL 中 的 函 數(shù) 名 , 如果 有 多 個(gè) 函 數(shù) , 各 個(gè) 函 數(shù) 名 用 空 格 隔 開 。 在 我 們 的 例 子 中 , 首 先 創(chuàng) 建 所 需 的 Matlab 函
15、 數(shù) 文 件 myfun.m。 function y=myfun(timeend) t=0:0.001:timeend; y=sin(2*pi*50*t); plot(y); 然 后 使 用 命 令 mcc -B csglsharedlib:mylib myfun 生 成 動(dòng) 態(tài) 鏈 接 庫 DLL。 Matlab 會(huì) 生 成一 系 列 文 件 , 其 中 mylib.h mylib.lib mylib.dll 以 及 相 同 目 錄 下 的 bin 下 的FigureMenuBar.fig 和 FigureToolBar.fig 是 我 們 在 以 后 所 需 要 使 用 的 。 3 在 V
16、C+中 使 用 Matlab 生 成 的 動(dòng) 態(tài) 鏈 接 庫 ( *.DLL) 為 了 能 在 VC+中 使 用 上 面 生 成 的 *.DLL,首 先 要 對(duì) VC+的 環(huán) 境 進(jìn) 行 一 些 設(shè) 置 : ( 1) 設(shè) 置 Include 和 Library 目 錄 在 VC+ IDE 中 選 擇 Tools-Options-Directories。 在 Show directoris for:中 選 擇 Include files, 添 加 如 下 兩 個(gè) 目 錄 : externinclude externincludecpp 在 Show directoris for:中 選 擇 Li
17、brary files, 添 加 如 下 兩 個(gè) 目 錄 : externlibwin32 externlibwin32microsofmsvc6 這 里 假 設(shè) 為 你 的 Matlab 的 安 裝 目 錄 。 這 些 操 作 只 需 要 一 次 , VC+ IDE 就 會(huì) 自 動(dòng) 記 錄 。 自 動(dòng) 應(yīng) 用 到 每 一 個(gè) 工 程 ( Project)。 ( 2) 工 程 (project)本 身 的 一 些 設(shè) 置 在 VC+ IDE 中 選 擇 Project-Setting-C/C+ 在 Category 中 選 擇 Code Generation, 在 Use run-time l
18、ibrary 中 選 擇 Multithreaded DLL。 在 Category 中 選 擇 Precompiled Headers,選 擇 Automatic use of precompiled headers,并 且 在 Through header 下 面 添 加 stdafx.h。 在 Category 中 選 擇 Preprocessor , 在 preprocessor definitions 中 添 加 MSVC,MSWIND,IBMPC. 在 VC+ IDE 中 選 擇 Project-Settings-Link 在 Categories 中 選 擇 Input, 在 I
19、gnore libraries:中 填 入 : msvcrt.lib。 ( 3) 為 工 程 添 加 相 應(yīng) 的 文 件 把 剛 才 生 成 的 mylib.h mylib.dll mylib.lib 和 externlibwin32 下 的 libmatpm.lib, externlibwin32microsofmsvc6 下 的 所 有 *.lib 文 件 復(fù) 制 到 VC+工 程 的 文 件 夾下 , 并 且 用 add files to project 添 加 的 工 程 中 。 接 下 來 就 可 以 使 用 剛 才 生 成 的 動(dòng) 態(tài) 鏈 接 庫 mylib.dll 了 。 首 先
20、 要 在 使 用 DLL 中 函 數(shù) 的 源文 件 中 加 上 頭 文 件 mylib.h。 在 使 用 之 前 還 需 要 對(duì) mylib.dll 進(jìn) 注 冊 , 使 用 完 畢 之 后 需 要對(duì) 其 進(jìn) 行 釋 放 。 注 冊 使 用 函 數(shù) mylibInitiallize();釋 放 使 用 函 數(shù) mylibTerminate()。 函 數(shù) 名的 規(guī) 則 就 是 youlibname+Initialize(Terminate). 這 兩 函 數(shù) 在 mylib.h 中 可 以 找 到 。 mylibInitialize()不 僅 注 冊 了 剛 才 生 成 的 mylib.dll,同
21、 時(shí) 它 也 注 冊 了 Matlab 本 身 的 一 些 動(dòng)態(tài) 鏈 接 庫 ( *.DLL); 同 理 mylibTerminate()不 僅 釋 放 了 剛 才 生 成 的 mylib.dll, 同 時(shí) 它 也釋 放 了 Matlab 本 身 的 一 些 動(dòng) 態(tài) 鏈 接 庫 ( *.DLL)。 因 此 在 注 冊 了 mylib.dll 之 后 , 我 們 也可 以 使 用 Matlab 的 數(shù) 學(xué) 庫 中 的 函 數(shù) , 例 如 mlfabs(), mlfAssign()等 等 。 在 使 用 mylib.dll 的 時(shí) 候 , 存 在 著 一 個(gè) VC+和 mylib.dll 中 的
22、函 數(shù) 之 間 數(shù) 據(jù) 交 互 的 問 題 。由 于 mylib.dll 中 的 函 數(shù) 所 接 受 的 參 數(shù) 是 mxArray 型 數(shù) 據(jù) 。 因 此 我 們 要 使 用 Matlab 為 我們 提 供 的 External Interfaces/ API 函 數(shù) 來 創(chuàng) 建 mxArray 型 數(shù) 據(jù) ,大 量 的 API 函 數(shù) 可 以 參 見Matlab 的 幫 助 文 件 MatlabExternal Interfaces/API ReferenceC MX-Functionsx 小 節(jié) 。還 有一 個(gè) 需 要 注 意 的 問 題 就 是 原 來 的 函 數(shù) 名 myfun 變
23、成 了 mlfMyfun。 可 以 在 mylib.h 中 看到 。 下 面 就 是 一 個(gè) 實(shí) 例 /包 含 頭 文 件 #include “mylib.h” . . . /注 冊 動(dòng) 態(tài) 鏈 接 庫 mylibInitialize(); double x=0.04; /創(chuàng) 建 mxArray 型 數(shù) 據(jù) 并 對(duì) 其 賦 值 mxArray *t; t=mxCreateDoubleMatrix(1,1,mxREAL); memcpy(mxGetPr(t),&x,sizeof(double); /或 者 使 用 t=mxCreateDoubleScalar(x) /或 者 使 用 Matlab
24、 數(shù) 學(xué) 庫 中 的 函 數(shù) mlfAssign()等 /使 用 mylib.dll 中 的 函 數(shù) mlfMyfun(t); /銷 毀 t, 釋 放 內(nèi) 存 mxDestroyArray(t); /注 銷 動(dòng) 態(tài) 鏈 接 庫 mylibTerminate(); 4 程 序 的 發(fā) 布 在 程 序 完 成 之 后 ,就 可 以 進(jìn) 行 打 包 發(fā) 布 了 。需 要 注 意 的 問 題 就 是 發(fā) 布 的 時(shí) 候 除 了 生 成 的 mylib.dll 和 FigureMenuBar.fig、 FigureToolBar.fig, 還 需 要 加 上 Matlab 的 一 些 動(dòng) 態(tài) 鏈 接庫 。 這 樣 發(fā) 布 的 程 序 就 可 以 完 全 脫 離 Matlab 的 環(huán) 境 而 獨(dú) 立 運(yùn) 行 了 。 如 何 得 到 這 些 動(dòng) 態(tài)鏈 接 庫 呢 ? 將 externlibwin32 下 的 mglinstaller.exe 解 壓 縮 , 會(huì) 得 到 mglarchive.exe, 再 將 mglarchive.exe 解 壓 縮 , 在 生 成 的 目 錄 binwin32下 就 是 程 序 獨(dú) 立運(yùn) 行 所 需 要 的 動(dòng) 態(tài) 鏈 接 庫 文 件 了 。 從 以 上 的 討 論 中 可 以 清 楚 的 看 到 , 使 用 Matlab 生 成 動(dòng) 態(tài)
溫馨提示
- 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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年人教A版九年級(jí)化學(xué)上冊月考試卷含答案
- 營銷方案模板六篇
- 2025年滬科版共同必修2物理下冊月考試卷含答案
- 2025年度新能源充電樁借車服務(wù)合同模板3篇
- 張家口職業(yè)技術(shù)學(xué)院《混合信號(hào)集成電路設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 營口理工學(xué)院《軟件工程導(dǎo)論(研究型)》2023-2024學(xué)年第一學(xué)期期末試卷
- 新疆科技職業(yè)技術(shù)學(xué)院《跨境電商美工實(shí)務(wù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024設(shè)計(jì)年度文化創(chuàng)意產(chǎn)品開發(fā)合同3篇
- 家庭教育中的時(shí)間管理與親子溝通
- 德育工作在商業(yè)教育中的實(shí)踐與思考
- 安全管理計(jì)劃指標(biāo)和指標(biāo)體系
- 倉庫物料盤點(diǎn)作業(yè)規(guī)范培訓(xùn)課件
- 無線網(wǎng)絡(luò)技術(shù)滿分期末大作業(yè)
- 2023無人機(jī)搭載紅外熱像設(shè)備檢測建筑外墻及屋面作業(yè)
- 《西游記》電子版閱讀-小學(xué)版
- 2021-2022學(xué)年北師大版六年級(jí)(上)數(shù)學(xué)寒假作業(yè)(一)
- GB/T 29490-2023企業(yè)知識(shí)產(chǎn)權(quán)合規(guī)管理體系要求
- 班組安全生產(chǎn)標(biāo)準(zhǔn)化管理手冊
- 攝影初級(jí)培訓(xùn)教程課件
- 幼兒園裝修合同
- GB/T 42615-2023在用電梯安全評(píng)估規(guī)范
評(píng)論
0/150
提交評(píng)論