Matlab的M文件生成動態(tài)鏈接庫DLL_第1頁
Matlab的M文件生成動態(tài)鏈接庫DLL_第2頁
Matlab的M文件生成動態(tài)鏈接庫DLL_第3頁
Matlab的M文件生成動態(tài)鏈接庫DLL_第4頁
Matlab的M文件生成動態(tài)鏈接庫DLL_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1 、 mcc4.0 編譯環(huán)境設(shè)置在桌面上右鍵單擊“我的電腦”圖標(biāo)出現(xiàn)以下菜單單擊“屬性”菜單項,出現(xiàn)“系統(tǒng)特性”對話框,單擊“高級”選項卡,如下圖所示在上圖中,單擊“環(huán)境變量”按鈕,出現(xiàn)“環(huán)境變量”對話框, 添加系統(tǒng)變量 matlab 值為 C:MATLAB7 即 matlab7.0 的安裝路徑,如下圖所示在環(huán)境變量 path 中加入 C:MATLAB7binwin32 ,如下圖所示按“確定”完成設(shè)置后, 重啟計算機或注銷當(dāng)前用戶 ,即可應(yīng)用新設(shè)置。2 、 Matlab7.0 編譯器設(shè)置(1) mex 命令設(shè)置 (a) 運行 Matlab ,在 Matlab 的命令窗口 (Command W

2、indow) 鍵入“ 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:Would you lik

3、e mex to locate installed compilers y/n? ySelect a compiler:1 Digital Visual Fortran version 6.0 in C:Program FilesMicrosoft Visual Studio2 Lcc C version 2.4 in C:MATLAB6P5syslcc3 Microsoft Visual C/C+ version 6.0 in C:Program FilesMicrosoft Visual Studio0 None此時鍵入 ” 3” ,按回車 ;選擇 Microsoft Visual C+6

4、.0 的編譯器(d) 命令窗口出現(xiàn)如下提示:Please verify your choices:Compiler: Microsoft Visual C/C+ 6.0Location: C:Program FilesMicrosoft Visual StudioAre these correct?(y/n):此時鍵入 ”y” ,按回車 ;確認(rèn)選擇 Microsoft Visual C+6.0 的編譯器(2) mbuild 命令設(shè)置 (a) 運行 Matlab ,在 Matlab 的命令窗口 (Command Window) 鍵入“ mbuild -setup ”命令后,按回車鍵,安裝 Mat

5、lab 編譯器;(b) 命令窗口出現(xiàn)如下提示:Please choose your compiler for building standalone MATLAB applications:Would you like mbuild to locate installed compilers y/n?此時鍵入 ”y” ,按回車 ;(c) 命令窗口出現(xiàn)如下提示:1 Lcc C version 2.4 in C:MATLAB6P5syslcc2 Microsoft Visual C/C+ version 6.0 in C:Program FilesMicrosoft Visual Studio0

6、None此時鍵入 ” 2” ,按回車 ;選擇 Microsoft Visual C+6.0 的編譯器(d) 命令窗口出現(xiàn)如下提示:Please verify your choices:Compiler: Microsoft Visual C/C+ 6.0Location: C:Program FilesMicrosoft Visual StudioAre these correct?(y/n):此時鍵入 ”y” ,按回車 ,確認(rèn)選擇 Microsoft Visual C+6.0 的編譯器,編譯器設(shè)置完成。3 、編寫 Matlab 函數(shù)函數(shù)文件 sum_prod.m ,內(nèi)容如下:function

7、 sum,prod = sum_prod(p1,p2)sum = p1+p2; % p1 與 p2 的和prod = p1.*p2; % p1 與 p2 的點乘該函數(shù)完成的是矩陣的求和與點乘的功能,下面將介紹把該代碼轉(zhuǎn)換成 VC+ 環(huán)境可用的代碼的方法。4 、將 Matlab 函數(shù)轉(zhuǎn)成 DLL 函數(shù)在 Matlab7.0 的 Command Window 下輸入命令 :命令 1 : mcc -W lib:libsum_prod -T link:lib sum_prod.m或命令 2 : mcc -W cpplib:libsum_prod -T link:lib sum_prod.m生成動態(tài)鏈接

8、庫 DLL ,編譯完成后, Matlab 生成一些文件, 其中l(wèi)ibsum_prod.ctflibsum_prod.dlllibsum_prod.hlibsum_prod.lib這些文件是我們后面需要用到的。特別注意 : 命令 1 生成的 DLL 函數(shù)接口的數(shù)據(jù)類型是 mxArray ,命令 2 生成的 DLL 函數(shù)接口的數(shù)據(jù)類型是 mwArray 。5 、 VC+6.0 工程的創(chuàng)建與設(shè)置(1) 建立一個名為 Test 的 C+ 控制臺工程,在工程中添加一個名為 Test.cpp 文件(2) 對 VC 6.0 ,進行以下設(shè)置單擊菜單 Tools ,出現(xiàn)如下菜單單擊 Options 菜單項,出現(xiàn)

9、 Options 對話框,選擇 Directories 標(biāo)簽,在 include files 里面加入:C:MATLAB7EXTERNINCLUDE如下圖所示在 Library files 里面加入:C:MATLAB7EXTERNLIBWIN32MICROSOFTMSVC60如下圖所示(3) 對該工程,進行以下設(shè)置單擊菜單 Project ,出現(xiàn)如下菜單單擊 Setting 菜單項,出現(xiàn) Project Setting 對話框,選擇 Link 標(biāo)簽,在 Object/library modules: 下面的文本框內(nèi)容的后面加入 mclmcrrt.lib libsum_prod.lib ,如下圖

10、所示6 、代碼編輯及 DLL 調(diào)用(1) 將前面生成的四個文件:libsum_prod.ctflibsum_prod.dlllibsum_prod.hlibsum_prod.lib復(fù)制到 VC 工程所在目錄。(2) 在 VC 6.0 環(huán)境中, 單擊菜單 Project , 選擇 Add to Project 菜單項,再單擊 Files 子菜單項,出現(xiàn)如下圖對話框,將 libsum_prod.h 加入到當(dāng)前工程中。(3) 當(dāng)用命令 1 生成的 DLL 函數(shù)時 ,在工程文件 Test.cpp 中添加以下代碼:#include "iostream.h" / 輸入輸出頭文件#inc

11、lude "mclmcr.h" / mxArray 類型聲明#include "libsum_prod.h" / DLL 頭文件void display(const mxArray* in, const char* name);int main()/ 初始化程序if( ! mclInitializeApplication(NULL,0) )fprintf(stderr, "Could not initialize the application.n");exit(1);/ 初始化庫if (! libsum_prodInitialize

12、() )fprintf(stderr,"Could not initialize the library.n");exit(1);/ 聲明 DLL 函數(shù)輸入輸出 mxArray 對象mxArray *X,*Y;mxArray *SUM=NULL,*PROD=NULL;/ 給輸入 mxArray 對象分配內(nèi)存X = mxCreateDoubleMatrix(2,3,mxREAL);Y = mxCreateDoubleMatrix(2,3,mxREAL);double x = 1,2,3,4,5,6;double y = 7,8,9,10,11,12;/ 給輸入 mxArray

13、 對象賦值memcpy(mxGetPr(X),x,6*sizeof(double);memcpy(mxGetPr(Y),y,6*sizeof(double);/ 調(diào)用 DLL 函數(shù),注意輸入與輸出的接口是不同的mlfSum_prod(2,&SUM,&PROD,X,Y) ;/ 顯示 mxArray 對象display(SUM,"SUM");display(PROD,"PROD");/ 釋放輸入輸出 mxArray 對象所占用的內(nèi)存/ 注意輸出對象的內(nèi)存是在調(diào)用 DLL 函數(shù)過程中分配的mxDestroyArray(X);mxDestroyA

14、rray(Y);mxDestroyArray(SUM);mxDestroyArray(PROD);/ 關(guān)閉庫和程序libsum_prodTerminate() ;mclTerminateApplication() ;return 0;/ 顯示矩陣函數(shù)void display(const mxArray* in, const char* name)int i,j,r,c;double *data;data = mxGetPr(in);r = mxGetM(in);c = mxGetN(in);printf("%s = n",name);for(i=0;i<r;i+)pr

15、intf("t");for(j=0;j<c;j+)printf("% 4.2f t",dataj*r+i);printf("n");printf("n");該 C+ 程序運算結(jié)果如下圖所示(4) 當(dāng)用命令 2 生成的 DLL 函數(shù)時 ,在工程文件 Test.cpp 中添加以下代碼:#include "iostream.h" / 輸入輸出頭文件#include "mclmcr.h" / mwArray 類型聲明#include "libsum_prod.h&qu

16、ot; / DLL 頭文件void display(const double* data, const int r, const int c, const char* name);int main()/ 初始化程序if( ! mclInitializeApplication(NULL,0) )fprintf(stderr, "Could not initialize the application.n");exit(1);/ 初始化庫if (! libsum_prodInitialize() )fprintf(stderr,"Could not initializ

17、e the library.n");exit(1);/ 聲明 DLL 函數(shù)輸入輸出 mwArray 對象mwArray X(2,3,mxDOUBLE_CLASS);mwArray Y(2,3,mxDOUBLE_CLASS);mwArray SUM,PROD;double x = 1,2,3,4,5,6;double y = 7,8,9,10,11,12;double *sum,*prod;sum = new double6;prod = new double6;/ 給輸入 mwArray 對象賦值X.SetData(x,6);Y.SetData(y,6);/ 調(diào)用 DLL 函數(shù)sum

18、_prod(2,SUM,PROD,X,Y) ;/ 取出輸出數(shù)據(jù)SUM.GetData(sum,6);PROD.GetData(prod,6);/ 顯示 mwArray 對象/ std:cout << "SUM = " << std:endl << SUM << std:endl;/ std:cout << "PROD = " << std:endl << PROD << std:endl;display(sum,2,3,"SUM");display(prod,2,3,"PROD");delete sum;delete pr

溫馨提示

  • 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

提交評論