




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 vs2010和Matlab R2012b 混合編程2013-05-24 22:40 10114人閱讀 評論(4) 收藏 舉報 分類: C+(2) 版權聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉載。思路:為了實現(xiàn)matlab與C+混合編程,采用由m文件構造動態(tài)鏈接庫然后在visual studio中調(diào)用的方法。本人系統(tǒng):Windows 7旗艦版(32位),VS2010旗艦版,Matlab R2012b 只有R2010b或以上版本才識別VS2010編輯器
2、60;1. matlab中dll創(chuàng)建 1.1 m文件編寫 function yt = myfitline( x,y,m,xrange,t ) %xy為坐標向量,m為多項式階數(shù),xrange為顯示圖上面的坐標范圍,t為要求的坐標橫軸位置
3、; % Detailed explanation goes here p=polyfit(x,y,m);%計算各階系數(shù)p1xm+p2x(m-1)+.+ pmx+ p(m+1) yy=polyval(p,xrange);%計算一個區(qū)域內(nèi)的函數(shù)值用于畫圖
4、60; yt=polyval(p,t); % 計算指定x下的函數(shù)對應的y值 plot(x,y,'r*',xrange,yy,'b') end 1.2 設置編譯器&
5、#160; >> mex -setup 選擇VS2010 >> mbuild -se
6、tup 選擇VS2010 >> mcc -W cpplib:Myfitline -T link:lib myfitline (這就創(chuàng)建好了)
7、60; 其中,mcc是Matlab提供的編譯命令,對于這一點,Matlab的幫助說明如下: -W lib:string link:lib其中-W是控制編譯之后的封裝格式,cpplib,是指編譯成C+的lib,cpplib冒號后面是指編譯的庫的名字,-T表示目標, link:lib表示要連接到一個庫文件的目標
8、,目標的名字是后面的myfitline,即你寫的m函數(shù)的名字。 運行完之后,你的目錄下面,將會出現(xiàn)以下一些文件: Myfitline.cpp
9、160; Myfitline.exp Myfitline.dll Myfitline.exports Myfitline.h
10、0; Myfitline.lib mccExcludedFiles.log readme.txt &
11、#160; 具體每一個文件的意思,請查幫助,這里只說其中很有用的幾個: Myfitline.dll是編譯好的動態(tài)庫,myfitline這個函數(shù)封裝在里面,Myfitline.h是對應的頭文件,在C里面調(diào)用這個函數(shù)的時候,需要include這個頭文件,
12、160;在這個頭文件的最后,你可以看到下面的內(nèi)容: extern LIB_Myfitline_CPP_API void MW_CALL_CONV myfitline(int nargout, mwArray& yt, const mwArray& x, const mwA
13、rray& y, const mwArray& m, const mwArray& xrange, const mwArray& t); 這就是myfitline的C函數(shù)的聲明。nargout表示輸出變量的個數(shù),其他就是對應了m函數(shù)的幾個變量。
14、 注意,變量的類型是mwArray,這是Matlab提供的一個特殊的變量類型(在7.0的版本,編譯之后,變量類型是mxArray)。mwArray是一個類,具體可以查幫助。 2.系統(tǒng)環(huán)境配置 Computer - > Properties
15、160;-> Advanced system settings -> Environment Variables -> User Variables -> path, 添加(MATLAB下為MATLAB 2012軟件安裝目錄) .MATLABexternlibwin32microsoft;
16、; .MATLABbinwin32 Computer - > Properties -> Advanced system settings -> Environment Variab
17、les -> System Variables -> path, 添加 .MATLABruntimewin32; .MATLABbin;
18、0; .MATLABexternlibwin32microsoft; .MATLABbinwin323.vs2010環(huán)境配置 Property Pages -> VC+ D
19、irectories -> Include Directories, 添加(安裝目錄下) .MATLABexterninclude Property Pages -> VC+ Directories ->
20、Library Directories, 添加 .MATLABexternlibwin32microsoft Property Pages -> C/C+ -> General -> Additional Includ
21、e Directories, 添加 .MATLABexterninclude Property Pages -> Linker -> General -> Additional Library Di
22、rectories, 添加 .MATLABexternlibwin32microsoft Property Pages -> Linker -> Input -> Additional Dependencies, 添加&
23、#160; libeng.lib
24、160; libmat.lib libmex.lib
25、0; libmx.lib mclmcrrt.lib
26、 mclmcr.lib Myfitline.lib 4.vs2010下完成程序
27、60; 把剛才生成的*.h *.dll *.lib文件復制到剛剛新建的工程的文件夾下,并且用添加現(xiàn)有項添加的工程中。(此處的*代表你的m文件名稱) 調(diào)用函數(shù) myfitline的文件前要 &
28、#160; #include "mclmcr.h"
29、#include "matrix.h" #include "mclcppclass.h"
30、160; #include "Myfitline.h” 具體程序如下: void CNewFeatureofS
31、tormView:Onposition() / TODO: 在此添加命令處理程序代碼
32、0;if( !MyfitlineInitialize() MessageBox(_T("初始化失敗");
33、60; / 為變量分配內(nèi)存空間,可以查幫助mwArray &
34、#160; mwArray mwX(5, 1, mxDOUBLE_CLASS); / 5,1表示矩陣的大?。ㄋ衜altab只有一種變量,就是矩陣, mwArray mwY(5, 1, mxDOUBLE_CLASS);/為了和Cpp變量接軌,設置成1*5的矩陣,mxDOUBLE_CLASS表示變量的精度)
35、0; mwArray mwM(1, 1, mxDOUBLE_CLASS); mwArray mwXR(50,1, mxDOUBLE_CLASS);
36、; mwArray mwYT(1,1, mxDOUBLE_CLASS); mwArray mwT(1,1, mxDOUBLE_CLASS);
37、160; int x5=432,435,438,441,443; /樣本點坐標 int y5=136,138,140,145,147; /
38、60; int xr50,m=3,t=446; /參數(shù)設置 for (int i=400;i<450;i+)
39、0; xri-400=i;
40、0; mwX.SetData(x, 5); /調(diào)用類里面的SetData函數(shù)給類賦值 mwY.SetData(y, 5);
41、; mwM.SetData(&m, 1); mwXR.SetData(xr, 50); &
42、#160; mwT.SetData(&t, 1); myfitline(1,mwYT,mwX,mwY,mwM,mwXR,mwT);
43、0; double c = mwYT.Get(1, 1); /調(diào)用類里面的Get函數(shù)獲取取函數(shù)返回值 CString strNumber; strNumber.Format(_T("
44、%lf"),c); MessageBox(strNumber, _T("坐標"); / 后面是一些終止調(diào)用的程序 &
45、#160; MyfitlineTerminate(); / terminate MCR
46、; mclTerminateApplication(); vs2010下調(diào)用matlab2012b調(diào)試方法標簽: matlabvs2010配置管理64位error LNK20192013-11-01 16:53 4435人閱讀 評論(2) 收藏 舉報 分類: matlab(3) vs2010版權聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉
47、載。配置環(huán)境:vs2010+matlab2012b+win7 64位說明:以安裝路徑“E:Program FilesMATLABR2012b”為例MATLAB外部支持文件夾:E:Program FilesMATLABR2012bexternmatlab自帶的c例程:E:Program FilesMATLABR2012bexternexampleseng_matengine.h的位置:E:Program FilesMATLABR2012bexterninclude各種lib的位置:E:Program FilesMATLABR2012bexternlibwin64microsoft在matlab幫
48、助中輸入“C language”即可找到有關MATLAB Engine的一個頁面。從這個頁面開始,學習各種關鍵詞,就能夠找到一切你需要的資料。使用MATLAB Engine一般用兩套函數(shù)就可以了。1.engXXXX,關于Engine本身的操作,包括打開/關閉,設置/取得變量,執(zhí)行語句等等。2.mxXXXX,關于數(shù)據(jù)類型mxArray的操作,與MATLAB交互的左右類型全部為mxArray。搭建過程:1.先在VC6的tools->options->directories里添加相關目錄include files:E:Program FilesMATLABR2012bexternincl
49、udeE:Program FilesMATLABR2012bexternincludewin64library files:E:Program FilesMATLABR2012bexternlibwin64microsoft2 點擊LInker input 將libmx.lib;libmex.lib;libeng.lib;加入到Additional Dependencies 或者用#pragma comment (lib, "libeng.lib") &
50、#160; #pragma comment (lib, "libmx.lib") #pragma comment (lib, "libmex.lib") 語句3 環(huán)境變量加上E:Program FilesMATLABR2012b
51、binwin64 否則編譯成功運行時會顯示缺少 dll4包含頭文件 engine.h5這就可以去調(diào)用engine里的一些引擎函數(shù)了做好這些后,如果我們環(huán)境一樣,下面的代碼應該能夠編通并且正常執(zhí)行,其中包含了常用的一些函數(shù),一般來說使用Engine的時候也就用這些了。出現(xiàn)問題解決方法:1 編譯出現(xiàn):1>test.obj : error LNK2019: 無法解析的外部符號 _engClose,該符號在函數(shù) _main 中被引用1>test.obj : error LNK2019: 無法解析的外部符號 _engSetVisible,該符號在函數(shù) _main 中被引用1>test.
52、obj : error LNK2019: 無法解析的外部符號 _mxDestroyArray,該符號在函數(shù) _main 中被引用1>test.obj : error LNK2019: 無法解析的外部符號 _mxGetData,該符號在函數(shù) _main 中被引用1>test.obj : error LNK2019: 無法解析的外部符號 _mxGetDimensions_730,該符號在函數(shù) _main 中被引用1>test.obj : error LNK2019: 無法解析的外部符號 _mxGetNumberOfDimensions_730,該符號在函數(shù) _main 中被引用1
53、>test.obj : error LNK2019: 無法解析的外部符號 _engGetVariable,該符號在函數(shù) _main 中被引用1>test.obj : error LNK2019: 無法解析的外部符號 _engEvalString,該符號在函數(shù) _main 中被引用1>test.obj : error LNK2019: 無法解析的外部符號 _engPutVariable,該符號在函數(shù) _main 中被引用1>test.obj : error LNK2019: 無法解析的外部符號 _mxGetPr,該符號在函數(shù) _main 中被引用1>test.obj
54、 : error LNK2019: 無法解析的外部符號 _mxCreateDoubleMatrix_730,該符號在函數(shù) _main 中被引用1>test.obj : error LNK2019: 無法解析的外部符號 _engOpen,該符號在函數(shù) _main 中被引用1>D:VSProjectsmatlabtestmatlabtestDebugmatlabtest.exe : fatal error LNK1120: 12 個無法解析的外部命令這個問題如果你按照上述配置好的話,這就很有可能出在兼容問題上。因為2012b只提供64位版本,所有需要將vs工程變?yōu)?4位。點擊win32
55、旁的下拉列表,選擇配置管理器。在活動解決方案平臺這里選擇x64即可。重新編譯一切ok。2 如果vs工程中還包含其他庫是32位的,那么只能裝matlab7 ,他只支持32位。而且matlab6.x版本又不支持vs2010.裝好以后,需要配置兼容性。然后點擊其桌面的快捷方式,修改其兼容性,我的系統(tǒng)是win7,改成了兼容vista,保存修改,點擊成功運行。uniquews· 博客園· 首頁· 新隨筆· 聯(lián)系· 訂閱· 管理隨筆- 51 文章- 0 評論- 7 VS2010與Matlab2010b混合編程VS
56、2010與Matlab2010b混合編程 套用今天的簽名“最新的VS+最新的MATLAB+最新的WINDOWS=無盡的煩惱 ”,用了一天的時間去配置相關的環(huán)境,確實很囧。好在現(xiàn)在問題解決了,特發(fā)布過程如下,希望能給有需要的朋友帶來幫助。 注:因為程序也是剛調(diào)通,所以有些原因還沒有仔細分析,如果不對,敬請指教。1.<MATLAB>表示MATLAB按照目錄2. 配置過程中的錯誤,請見:附錄3.文中包含"只針對64位WINDOWS"字眼設置的,在WIN32(X86)環(huán)境無需設置4.本文配置
57、中可能包含多余的一些配置,不過現(xiàn)在的目的是運行成功哈至于精簡部分,待我和大家使用時慢慢研究。 /*環(huán)境:1.VS20102.MATLAB 2010b3.WINDOW 7 (X64)*/ 1.Matlab環(huán)境設置 要建立獨立運行的C應用程序,系統(tǒng)中需要安裝Matlab、Matlab編譯器、C/C+編譯器以及Matlab C/C+數(shù)學庫函數(shù)和圖形庫函數(shù)。Matlab編譯器使用mbuild命令可以直接將C/C+源代碼編譯為獨立運行程序,在這些源代碼中可以使用Matlab提供的
58、接口來調(diào)用Matlab數(shù)學庫函數(shù)。 雖然生成的可執(zhí)行程序可以脫離Matlab環(huán)境運行,但是它需要Matlab C/C+數(shù)學庫文件或者圖形庫文件的支持才能運行。但如果C/C+源代碼完全是按傳統(tǒng)C/C+源代碼語法規(guī)則編寫,沒有包含Matlab數(shù)學庫和圖形庫的調(diào)用,則不僅可以獨立與Matlab環(huán)境,也不需要那兩個庫函數(shù)的支持。 在 Matlab 的Command Window 下輸入命令
59、mbuild setup 操作過程如下圖: 然后輸入命令 mex setup 以類似的方法配置編譯器。Matlab 的配置完成。 2.VS環(huán)境設置(1)設置Include 和Library 目錄 項目右鍵->屬性->VC+目錄->包含目錄:添加 <MATL
60、AB>R2010bexternincludewin64 <MATLAB>R2010bexterninclude 項目右鍵->屬性->VC+目錄->庫目錄:添加 <MATLAB>R2010bexternlibwin32microsoft <MATLAB>R2010bexternlibwin64microsoft 截圖(部分): (2)設置工程目錄 項目右鍵->屬性->C/C+->常規(guī)->附件包含目錄:添加 <MATLAB>R2010bexternincludewin64 <MATLAB>R2010bexterninclude
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度醫(yī)護就業(yè)合同模板(醫(yī)療安全風險管理)
- 二零二五年度國際論壇會務接待與翻譯服務合同
- 2025年度糧食倉儲物流保險合同
- 2025年醫(yī)用植入材料合作協(xié)議書
- 2025年度臨時用工勞務服務合同
- 2025年空氣煙氣監(jiān)測系統(tǒng)項目合作計劃書
- 2025年汽車尾氣自動測定儀合作協(xié)議書
- 2025年高性能氣敏傳感器項目建議書
- 矯形外科手術器械項目績效評估報告
- 機場信息網(wǎng)絡系統(tǒng)項目績效評估報告
- 高壓發(fā)電機細分市場深度研究報告
- 培訓機構疫情防控管理制度
- 腰椎間盤突出癥護理查房課件
- 新聞采訪與寫作課件第十五章其他報道樣式的寫作
- 第15課人機對話的實現(xiàn)(教學設計)六年級上冊信息技術浙教版
- 學校托管工作方案
- 腎性高血壓的護理查房
- 醫(yī)療巡視與巡查制度
- 第11課 社會歷史的主體-【中職專用】2024年中職思想政治《哲學與人生》金牌課件(高教版2023·基礎模塊)
- 六年級成長冊課件
- 大學創(chuàng)意寫作(葛紅兵第二版)課件全套 第1-8章 科學活動與科技結構-廣告文案與軟文
評論
0/150
提交評論