如何將Matlab6.5函數(shù)轉(zhuǎn)換成VC++6.0動態(tài)鏈接庫_第1頁
如何將Matlab6.5函數(shù)轉(zhuǎn)換成VC++6.0動態(tài)鏈接庫_第2頁
如何將Matlab6.5函數(shù)轉(zhuǎn)換成VC++6.0動態(tài)鏈接庫_第3頁
如何將Matlab6.5函數(shù)轉(zhuǎn)換成VC++6.0動態(tài)鏈接庫_第4頁
如何將Matlab6.5函數(shù)轉(zhuǎn)換成VC++6.0動態(tài)鏈接庫_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、1 如何將 matlab6.5 函數(shù)轉(zhuǎn)換成 vc+6.0 動態(tài)鏈接庫1、編寫 matlab 函數(shù)函數(shù)文件sum_prod.m,內(nèi)容如下:function sum,prod = sum_prod(p1,p2) sum = p1+p2; % p1 與 p2 的和prod = p1.*p2; % p1 與 p2 的點乘該函數(shù)完成的是矩陣的求和與點乘的功能,下面將介紹把該代碼轉(zhuǎn)換成c+環(huán)境可用的代碼的方法。2、matlab6.5編譯器設(shè)置(1) 在同一臺電腦上安裝matlab6.5 和 visual c+6.0 ;(2) mex 命令設(shè)置(a)運行 matlab,在 matlab 的命令窗口 (com

2、mand window) 鍵入“ mex -setup”命令后,按回車鍵,安裝 matlab 編譯器;(b) 命令窗口出現(xiàn)如下提示:please choose your compiler for building external interface (mex) files: would you like mex to locate installed compilers y/n? 此時鍵入 ” y” ,按回車;(c) 命令窗口出現(xiàn)如下提示:please choose your compiler for building external interface (mex) files: woul

3、d you like mex to locate installed compilers y/n? y select a compiler: 1 digital visual fortran version 6.0 in c:program filesmicrosoft visual studio 2 lcc c version 2.4 in c:matlab6p5syslcc 3 microsoft visual c/c+ version 6.0 in c:program filesmicrosoft visual studio 0 none 此時鍵入 ” 3” ,按回車;選擇microso

4、ft visual c+6.0的編譯器(d) 命令窗口出現(xiàn)如下提示:please verify your choices: compiler: microsoft visual c/c+ 6.0 location: c:program filesmicrosoft visual studio are these correct?(y/n): 此時鍵入 ” y” ,按回車;確認(rèn)選擇microsoft visual c+6.0的編譯器(3) mbuild 命令設(shè)置(a) 運行 matlab,在 matlab 的命令窗口 (command window) 鍵入“ mbuild -setup”命令后,

5、按回車鍵,安裝 matlab 編譯器;(b) 命令窗口出現(xiàn)如下提示:please choose your compiler for building standalone ma tlab applications: would you like mbuild to locate installed compilers y/n? 此時鍵入 ” y” ,按回車;(c) 命令窗口出現(xiàn)如下提示:1 lcc c version 2.4 in c:matlab6p5syslcc 2 2 microsoft visual c/c+ version 6.0 in c:program filesmicrosof

6、t visual studio 0 none 此時鍵入 ” 2” ,按回車;選擇microsoft visual c+6.0的編譯器(d) 命令窗口出現(xiàn)如下提示:please verify your choices: compiler: microsoft visual c/c+ 6.0 location: c:program filesmicrosoft visual studio are these correct?(y/n): 此時鍵入 ” y” ,按回車;確認(rèn)選擇microsoft visual c+6.0的編譯器(4) 在matlab的命令窗口(command window) 鍵入“

7、 cd(prefdir); mccsavepath prefdir; ”啟動matlab add-in工具條3、建立 mfc 動態(tài)鏈接工程(1) 建立一個名為sample 的 mfc 動態(tài)鏈接工程 ,如下圖所示,其它選項按默認(rèn)設(shè)置。(2) 在 sample 目錄下會生成sample.cpp 和 sample.h 這兩個文件。4、啟用 matlab add-in 工具條在上面的vc 工程中,在菜單欄的空白處右鍵單擊鼠標(biāo),出現(xiàn)如下菜單3 點擊 coustomize菜單項,出現(xiàn)如下coustomize 對話框,選擇 add-in and macro files 標(biāo)簽,選中ma tlab add-in

8、選項,點 close 按鈕關(guān)閉對話框,這里會在菜單附近出現(xiàn)如下工具條,它就是matlab add-in 工具條。5、vc+6.0 環(huán)境及工程設(shè)置在上面的vc 工程中,進行以下設(shè)置(1) vc+6.0 環(huán)境設(shè)置單擊菜單tools,出現(xiàn)如下菜單4 單擊 options 菜單項,出現(xiàn)options 對話框,選擇directories 標(biāo)簽,在include files 里面加入:c:matlab6p5externinclude c:matlab6p5externincludecpp 如下圖所示在 library files 里面加入:c:matlab6p5externlib c:matlab6p5e

9、xternlibwin32 c:matlab6p5externlibwin32microsoftmsvc60 如下圖所示5 (2) vc+6.0 工程設(shè)置單擊菜單project,出現(xiàn)如下菜單單擊 setting菜單項,出現(xiàn)project setting 對話框,選擇link 標(biāo)簽,在object/library modules: 下面的 文 本 框 內(nèi) 容 的 后 面 加 入libmmfile.lib libmatlb.lib libmx.lib libmat.lib libmatpm.lib sgl.lib libmwsglm.lib libmwservices.lib,如下圖所示6 選 擇

10、c/c+標(biāo) 簽 , 在prerocessor definitions: 下 面 的 文 本 框內(nèi) 容 的 后 面加入 ,msvc,ibmpc,mswind,如下圖所示設(shè)置完成。7 6、matlab 到 c+的代碼轉(zhuǎn)換在上面的vc 工程中(1) 將前面 sum_prod.m 文件復(fù)制到該sample 工程所在的目錄下(2) 單擊 matlab add-in 工具條最左邊第一個按鈕,出現(xiàn)如下對話框選中 windows console exe 四個選擇選中后二項,如上圖所示,單擊ok,出現(xiàn)如下對話框選中 matlab 函數(shù)文件 sum_prod.m, 單擊 “打開”按鈕,這樣在該工程所在的目錄就生成

11、了sum_prod.cpp和 sum_prod.hpp 文件。(3) 打開 sum_prod.cpp 文件,注意到里面有這樣一個函數(shù)mwarray sum_prod(mwarray * prod, mwarray p1, mwarray p2) 可以看到在c+環(huán)境中,sum_prod 也是一個函數(shù), 它的輸入與輸出數(shù)據(jù)類型是mwarray , 它是 vc6.0專門為matlab 中的矩陣對象定義的一個類。函數(shù)sum_prod 有三個輸入?yún)?shù)和一個輸出參數(shù)。由于c+函數(shù)不能有一個以上的返回值,因此這里將matlab 函數(shù) sum_prod 的第二個返回值,以地址型變量的形式作為c+函數(shù) sum_

12、prod 的第一個輸入?yún)?shù)。7、生成 mfc 動態(tài)鏈接函數(shù)在上面的vc 工程中(1) 打開 sample.cpp 文件;(2) 在 sample.cpp 頭部加入以下代碼:#include matlab.hpp / 包含類 mwarray 定義8 #include sum_prod.hpp / 包含 c+函數(shù) sum_prod (3) 在 sample.cpp 尾部加入以下代碼:/ 聲明函數(shù)sum_prod 為導(dǎo)出函數(shù)。extern c _declspec(dllexport)void sum_prod(double *sum, double *prod, double *x, double

13、*y, int rows, int cols) / mfc dll導(dǎo)出函數(shù)的開頭要加這一行afx_manage_state(afxgetstaticmodulestate(); / 初始化與c+數(shù)組相對應(yīng)的mwarray 變量mwarray x(rows,cols,x); mwarray y(rows,cols,y); mwarray sum,prod; / 調(diào)用 c+函數(shù)sum = sum_prod(&prod,x,y); / 取出輸出數(shù)據(jù)memcpy(sum,mxgetpr(sum.getdata(),rows*cols*sizeof(double); memcpy(prod,mx

14、getpr(prod.getdata(),rows*cols*sizeof(double); (4) 直接按快捷鍵f7 或下面工具欄的第2 個按鈕編譯鏈接程序,“忽略”編譯過程中有關(guān)庫文件msvcrt.lib 的警告。就在 sample目錄或是sampledebug 目錄下生成了sample.dll、sample.lib 這兩個文件。8、c+環(huán)境測試 mfc 動態(tài)鏈接函數(shù)(1) 新建一個c+控制臺工程test 9 其它都采用默認(rèn)設(shè)置。然后在該工程中添加test.cpp 文件(2) 將前面生成的sample.dll、sample.lib 文件,復(fù)制到test目錄下 。(3) 單擊菜單projec

15、t,出現(xiàn)如下菜單10 單擊 setting菜單項,出現(xiàn)project setting 對話框,選擇link 標(biāo)簽,在object/library modules: 下面的文本框內(nèi)容的后面加入sample.lib 如下圖所示,然后單擊ok 按鈕。(4) 在 test.cpp 鍵入以下代碼:#include #include #pragma comment(lib,sample.lib) / 加載 dll 庫文件/ 聲明外部函數(shù)sum_prod extern c _declspec(dllimport) void sum_prod(double *sum, double *prod, double

16、 *x, double *y, int rows, int cols); 11 void main() int i,j; / 定義 c+二維數(shù)組double x = 1,2,3,4,5,6; double y = 7,8,9,10,11,12; double *sum,*prod; / 給輸出數(shù)據(jù)分配內(nèi)存sum =(double*) calloc(6,sizeof(double); prod =(double*) calloc(6,sizeof(double); / 調(diào)用 dll 函數(shù)sum_prod(sum,prod,x,y,2,3); / 輸出顯示cout sum = endl; for (i=0;i2;i+) for (j=0;j3;j+) cout sumj*2+i t; cout endl; cout prod = endl; for (i=0;i2;i+) for (j=0;j3;j+) cout prodj*2+i t; cout endl; / 釋放內(nèi)存free(sum); free(prod); 該 c+程序運算結(jié)果如下圖所示12 特別說明一:在 cc+環(huán)境中二維數(shù)組是“行向量”,如果將下面定義的變量x 看成二維數(shù)組的話double x = 1,2,3,4,5,6; 那么 x 應(yīng)該是23的矩陣,即x = 1,2,3; 4,5,6; 但是,如果將數(shù)組首地址x 初

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論