![VC++與MATLAB接口編程方法與實(shí)現(xiàn)_第1頁(yè)](http://file4.renrendoc.com/view/ec076955b08ba506896055554714e15f/ec076955b08ba506896055554714e15f1.gif)
![VC++與MATLAB接口編程方法與實(shí)現(xiàn)_第2頁(yè)](http://file4.renrendoc.com/view/ec076955b08ba506896055554714e15f/ec076955b08ba506896055554714e15f2.gif)
![VC++與MATLAB接口編程方法與實(shí)現(xiàn)_第3頁(yè)](http://file4.renrendoc.com/view/ec076955b08ba506896055554714e15f/ec076955b08ba506896055554714e15f3.gif)
![VC++與MATLAB接口編程方法與實(shí)現(xiàn)_第4頁(yè)](http://file4.renrendoc.com/view/ec076955b08ba506896055554714e15f/ec076955b08ba506896055554714e15f4.gif)
![VC++與MATLAB接口編程方法與實(shí)現(xiàn)_第5頁(yè)](http://file4.renrendoc.com/view/ec076955b08ba506896055554714e15f/ec076955b08ba506896055554714e15f5.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、VC+與MATLAB接口編程方法與實(shí)現(xiàn)摘要本文簡(jiǎn)介了V+和ATLAB特點(diǎn),討論了ATLAB與V+接口編程的三種方法,并詳細(xì)闡述了和組件接口編程的方法和實(shí)現(xiàn)過(guò)程。研究說(shuō)明:采用V+和ATLAB接口編程方法降低了編程難度,較好地發(fā)揮了兩者各自的優(yōu)勢(shì)。關(guān)鍵詞ATLAB;V+;接口編程ATLAB是美國(guó)athrks公司研制開(kāi)發(fā)的一種科學(xué)計(jì)算軟件,它將高性能的數(shù)值計(jì)算、符號(hào)計(jì)算和可視化集成在一起,并提供了大量的內(nèi)置函數(shù)以及功能豐富的工具箱,使用方便,編程效率高。然而,ATLAB是一種解釋性語(yǔ)言,運(yùn)行效率低,不合適作為通用的編程平臺(tái)。V+是irsft公司推出的一個(gè)基于inds平臺(tái)的可視化的集成開(kāi)發(fā)環(huán)境,在運(yùn)
2、行速度、功能性以及應(yīng)用程序界面開(kāi)發(fā)方面功能強(qiáng)大,但在數(shù)值計(jì)算和圖形繪制方面,V+并不具備太多優(yōu)勢(shì)。因此,采用ATLAB進(jìn)展核心程序的開(kāi)發(fā),用V+制作出友好的程序界面,然后將兩者結(jié)合起來(lái),可以較大地進(jìn)步編程效率。1.1ATLAB引擎方式ATLAB引擎采用客戶(hù)機(jī)/效勞器(lient/Server)的方式,提供了一組ATABAPI函數(shù),通過(guò)調(diào)用這些函數(shù)實(shí)現(xiàn)以用程序進(jìn)程之間的數(shù)據(jù)傳遞。在運(yùn)用中,讓V+程序作為前端客戶(hù)機(jī),它向ATLAB引擎?zhèn)鬟f命令和數(shù)據(jù),并從ATLAB引擎承受數(shù)據(jù)信息,實(shí)現(xiàn)動(dòng)態(tài)通訊。1.2ATLAB編譯器是ATLAB中經(jīng)過(guò)優(yōu)化的編譯器。使用,用戶(hù)可以將ATLAB數(shù)學(xué)庫(kù)、圖形庫(kù)和界面的A
3、TLAB程序轉(zhuǎn)化為獨(dú)立于ATLAB的EXE應(yīng)用程序和DLL動(dòng)態(tài)連接庫(kù),在V中編寫(xiě)程序界面并加載調(diào)用動(dòng)態(tài)連接庫(kù),實(shí)現(xiàn)兩者之間的連接。1.3組件組件對(duì)象模型簡(jiǎn)稱(chēng)R是以組件為發(fā)布單元的對(duì)象模型。它提供一種可以共享二進(jìn)制代碼的工業(yè)標(biāo)準(zhǔn),允許任何符合標(biāo)準(zhǔn)的程序訪(fǎng)問(wèn),所以作為不同語(yǔ)言之間的協(xié)作開(kāi)發(fā)是非常方便的。ATLAB的編譯器是在ATLAB6.5中才開(kāi)場(chǎng)提供的一個(gè)新工具,從ATLAB7.0起,這個(gè)產(chǎn)品改名為ATLABBuilderfr?;诘幕旌暇幊谭椒ㄒ彩莂thrks公司推薦使用的方法。以上三種方法中,采用ATLAB引擎方式,應(yīng)用程序整體性能好,ATLAB引擎支持功能全面,但需要ATLAB后臺(tái)運(yùn)行,不
4、能脫離ALAB環(huán)境。而方法和組件方法均可以脫離ATLAB環(huán)境,應(yīng)用程序運(yùn)行效率高,利于軟件的開(kāi)發(fā),本文將重點(diǎn)闡述和組件方法。2.1ATLAB與V+接口配置采用方法需要對(duì)ATLAB和V+接口設(shè)置,配置步驟如下:1)ATLAB編譯器配置首先在ATLAB命令提示符下輸入build-setup命令,選擇編譯器,(需要注意的是必須確保計(jì)算機(jī)上已經(jīng)安裝了某個(gè)版本的V+,本文選擇visual+6.0)完成編譯器設(shè)置。2)V+環(huán)境設(shè)置(1)設(shè)定頭文件和庫(kù)文件途徑。在V+環(huán)境菜單欄中選擇Tls-ptins-Diretries,在“Shdiretriesfr欄中首先選擇Inludefiles,然后在“diretr
5、ies中將atlab7.0安裝目ExternLibin32irsftSV+60添加進(jìn)去。再次在“Shdiretriesfr欄中選擇Librarysfiles,再在“diretries中添加atlab7.0安裝目錄ExternInlude。(2)設(shè)置編譯連接選項(xiàng)。在V+環(huán)境菜單欄中選擇Prjet-setting,然后選擇link選項(xiàng)卡,在bjet/librarydules欄中添加lrrt.liblibtest.lib;選擇General選項(xiàng)卡,在irsftFundatinlasses欄中選擇UseFinaSharedLibrary。2.2實(shí)例演示完成ATLAB和V+的接口設(shè)置以后,就可以實(shí)現(xiàn)AT
6、LAB和V+的接口編程,詳細(xì)步驟如下:1)編寫(xiě)函數(shù)文件“ypasal.funtin=ypasal(n)=pasal(n);=;例如函數(shù)文件的作用是生成一個(gè)n階的帕斯卡矩陣并返回,Pasal矩陣特點(diǎn):第一行和第一列的元素均為1,其他位置的元素是前方的元素和上方的元素之和。需要注意的是:由于ATLAB中矩陣存儲(chǔ)方式是以矩陣的列為先,也就是數(shù)據(jù)從第一列開(kāi)場(chǎng)逐列存儲(chǔ)的,而/+中矩陣那么是以第一行開(kāi)場(chǎng)逐漸存儲(chǔ)的,因此在函數(shù)的最后一行對(duì)返回矩陣取轉(zhuǎn)置運(yùn)算,等效于使得計(jì)算得到的矩陣數(shù)據(jù)以行形式存儲(chǔ)。2)編譯文件在ATLAB命令行輸入-Bsharedlib:libtestypasal.-v命令(或-lib:l
7、ibtest-Tlink:libypasal.)將文件編譯成共享動(dòng)態(tài)鏈接庫(kù)文件。命令執(zhí)行完畢后,在當(dāng)前目錄中生成頭文件(libtest.h)、引入庫(kù)文件(libtest.lib)、tf(libtest.tf)文件、動(dòng)態(tài)鏈接庫(kù)文件(libtest.dll)、源文件(libtest.)等8個(gè)文件。3)創(chuàng)立工程對(duì)話(huà)框運(yùn)行visual+創(chuàng)立一個(gè)對(duì)話(huà)框工程,取名為test,承受所有默認(rèn)的設(shè)置。去掉對(duì)話(huà)框上的靜態(tài)文本和按鈕,增加一個(gè)按鈕、一個(gè)靜態(tài)文本框、編輯框以及一個(gè)Listntrl,鼠標(biāo)右鍵單擊Listntrl,選擇Prperties,把Vie改成Reprt,對(duì)話(huà)框界面如圖1所示。給Listntrl控件
8、添加listtrl類(lèi)的對(duì)象_List,給編輯框關(guān)聯(lián)一個(gè)整型成員變量_size,給按鈕增加一個(gè)消息響應(yīng)函數(shù)。圖14)添加編譯文件到工程將編譯生成的“l(fā)ibtest.h、“l(fā)ibtest.dll、“l(fā)ibtest.lib,“l(fā)ibtest.tf四個(gè)文件復(fù)制到工程目錄,將libtest.h參加工程,并在對(duì)話(huà)框程序文件“testDlg.pp中添加頭文件“l(fā)ibtest.h。5)V+中調(diào)用動(dòng)態(tài)連接庫(kù)在nInitDialg()函數(shù)中添加初始化libtest.dll進(jìn)程的碼:BLTestDlg:nInitDialg()Dialg:nInitDialg();/TD:Addextrainitializatinh
9、ereif(!lInitializeAppliatin(NULL,0)AfxessageBx(不能初始化程序!);exit(1);if(!libtestInitialize()AfxessageBx(不能初始化連接庫(kù)!);exit(1);returnTRUE;/returnTRUEunlessyusetthefustantrl在vidTestDlg:nreatebutt()函數(shù)中添加以下代碼,實(shí)現(xiàn)對(duì)ypasal.的調(diào)用,并將計(jì)算結(jié)果顯示在對(duì)話(huà)框界面中。vidTestDlg:nreatebutt()/TD:AddyurntrlntifiatinhandlerdehereUpdateData(TR
10、UE);dubledata;data=duble(_size);xArray*size;/輸入?yún)?shù)xArray*ut=NULL;/輸出參數(shù)/創(chuàng)立xArray數(shù)據(jù)對(duì)象,雙精度標(biāo)量size=xreateDubleSalar(data);/內(nèi)存復(fù)制賦值epy(xGetPr(size),data,1*sizef(duble);lfypasal(1,ut,size);/函數(shù)調(diào)用/結(jié)果數(shù)據(jù)顯示Stringstrtext;inti,j;/去除已顯示的數(shù)據(jù)_List.DeleteAllItes();intnlun=_List.GetHeadertrl()-GetIteunt();fr(i=0;inlun;i+
11、)_List.Deletelun(0);/設(shè)置標(biāo)題欄_List.Insertlun(0,);/附空值_List.Setlunidth(0,60);/設(shè)置每欄寬度f(wàn)r(i=0;i_size;i+)strtext.Frat(lun%d,i+1);_List.Insertlun(i+1,strtext);_List.Setlunidth(i+1,60);/顯示結(jié)果數(shù)據(jù)fr(i=0;i_size;i+)strtext.Frat(R%d,i+1);_List.InsertIte(i+1,strtext);fr(j=0;j_size;j+)strtext.Frat(%.f,*(xGetPr(ut)+i*_
12、size+j);_List.SetIteText(i,j+1,strtext);xDestryArray(size);/數(shù)據(jù)內(nèi)存釋放xDestryArray(ut);利用lassizard為對(duì)話(huà)框添加nDestry()函數(shù),并添加以下代碼:vidTestDlg:nDestry()Dialg:nDestry();/TD:AddyuressagehandlerdeherlibtestTerinate();/終止進(jìn)程lTerinateAppliatin();/終止R在V+中編譯、運(yùn)行結(jié)果如圖2所示,與在ATLAB中運(yùn)行文件的結(jié)果一樣。圖26)獨(dú)立應(yīng)用程序的發(fā)布發(fā)布獨(dú)立的應(yīng)用程序時(shí),需要拷貝以下幾個(gè)文
13、件到目的機(jī)器上:RInstaller.exe,這個(gè)文件位于atlab7.0安裝目錄tl-bxpilerdeplyin32目錄之下,應(yīng)用程序運(yùn)行前要先點(diǎn)擊運(yùn)行RInstaller.exe文件,按照提示步驟安裝好R,然后將工程文件的可執(zhí)行程序(.exe)、共享庫(kù)(.dll)以及其對(duì)應(yīng)的tf文件復(fù)制到目的計(jì)算機(jī)即可獨(dú)立運(yùn)行。3.1ATLAB里創(chuàng)立組件使用組件方法首先需要在ATLAB中創(chuàng)立組件,步驟如下:1)創(chuàng)立組件在ATLAB命令窗口輸入命令tl,翻開(kāi)atlabBuilder對(duì)話(huà)框,它是atlabbuilderfr的主要工作環(huán)境。點(diǎn)擊File-NePrjet,會(huì)彈出一個(gè)新工程設(shè)置對(duì)話(huà)框,填入組件名和
14、類(lèi)名,完成之后點(diǎn)K,完成新工程的創(chuàng)立。假如選擇的工程所在目錄并不存在,tl會(huì)提示該目錄不存在,并詢(xún)問(wèn)是否創(chuàng)立該目錄,選擇Yes,tl就會(huì)創(chuàng)立工程到該目錄。2)添加文件到組件執(zhí)行完第一步后回到atlabbuilder界面。點(diǎn)擊剛剛創(chuàng)立的工程,單擊Addfiles按鈕,將文件添加到新建的組件類(lèi)中。然后點(diǎn)擊Build-bjet編譯當(dāng)前工程的組件,這個(gè)步驟不僅編譯了組件,同時(shí)也在計(jì)算機(jī)上注冊(cè)了該組件,它可以像其他組件一樣在V+中使用。編譯完成以后在用戶(hù)設(shè)置的工程目錄下將產(chǎn)生兩個(gè)子文件夾sr和distrib,sr里包含組件的源代碼,distrib里包含供用戶(hù)最終發(fā)布使用的組件。3)打包組件及R編譯完畢后
15、產(chǎn)生的組件只能在當(dāng)前計(jì)算機(jī)上使用,為了可以把它發(fā)布到其他計(jì)算機(jī)上使用,還需要其他一些支持文件。另外,組件不同于普通的DLL文件,組件必須注冊(cè)后才能在計(jì)算機(jī)上使用。選擇pnent-pakagepnent命令,tl將會(huì)把發(fā)布該組件所需要的所有文件打包到一個(gè)和工程同名的可執(zhí)行文件中。這里可以選擇是否在打包文件中包含R。ATLAB7.0產(chǎn)生的組件必須運(yùn)行在R環(huán)境。假如目的計(jì)算機(jī)上沒(méi)有安裝R,那么在打包組件的時(shí)候最好選擇包含R,這樣在打包文件中就會(huì)包含R的安裝文件。打包完成后將會(huì)在distrib中產(chǎn)生.exe的可執(zhí)行文件,這是一個(gè)可以自解壓的壓縮文件。其中包含4個(gè)文件:_install.bat,dll文
16、件,tf文件,RInstaller.exe。把產(chǎn)生的.exe文件復(fù)制到需要發(fā)布的計(jì)算機(jī)上運(yùn)行。結(jié)果將會(huì)把這四個(gè)文件解壓,并執(zhí)行_install.bat,這是一個(gè)DS批處理文件,查看_install.bat的內(nèi)容后可以發(fā)現(xiàn)_install.bat將會(huì)運(yùn)行RInstaller.exe來(lái)安裝R,并且在系統(tǒng)中注冊(cè)組件文件。3.2實(shí)例演示這里仍舊采用上例“ypasal.文件,按照3.1介紹的步驟創(chuàng)立組件,組件名取Tpasal,類(lèi)名取Tpasallass。運(yùn)行visual+創(chuàng)立一個(gè)與上例一樣對(duì)話(huà)框工程,對(duì)話(huà)框設(shè)置也與上例一樣。然后在F工程中進(jìn)展如下操作:1)導(dǎo)入DLL文件將distrib文件夾里Tpasa
17、l_1_0.dll拷貝到工程文件夾,然后用V+命令#iprt來(lái)把Tpasal_1_0.dll導(dǎo)入工程中,#iprt命令的作用是從Tpasal_1_0.dll中導(dǎo)入組件中的接口類(lèi)型定義,詳細(xì)做法是在stdafx.h里,參加下面兩行:#iprtTpasal_1_0.dllra_interfaes_nlyusingnaespaeTpasal;2)為工程對(duì)話(huà)框添加實(shí)現(xiàn)代碼在對(duì)話(huà)框按鈕消息響應(yīng)函數(shù)中編寫(xiě)調(diào)用組件代碼:vidTestDlg:nreatebuttn()/TD:AddyurntrlntifiatinhandlerdehereUpdateData(TRUE);Initialize(NULL);/
18、初始化/得到對(duì)象的LSIDLSIDlsid;HRESULThr;hr=LSIDFrPrgID(LESTR(Tpasal.Tpasallass.1_0),lsid);/創(chuàng)立一個(gè)對(duì)象的實(shí)例ITpasallass*pIpasal;hr=reatEinstane(lsid,NULL,LSTX_INPR_SERVER,_uuidf(ITpasallass),(LPVID*)pIpasal);if(FAILED(hr)/測(cè)試創(chuàng)立是否成功AfxessageBx(reatefailed);return;/初始化VARIANT變量VARIANTsize,ut;VariantInit(size);VariantI
19、nit(ut);/創(chuàng)立size,類(lèi)型為VT_R8,即duble型size.vt=VT_R8;size.dblVal=(duble)_size;/創(chuàng)立二維數(shù)組ut,類(lèi)型為VT_ARRAY,ARRAY中的元素為duble型ut.vt=VT_ARRAY|VT_R8;SAFEARRAYBUNDbund2;/設(shè)置第一維數(shù)組元素個(gè)數(shù)、元素索引下界bund0.Eleents=_size;bund0.lLbund=0;/設(shè)置第二維數(shù)組元素個(gè)數(shù)、元素索引下界bund1.Eleents=_size;bund1.lLbund=0;ut.parray=SafeArrayreate(VT_R8,2,bund);pIpasal-ypasal(1,ut,size);/函數(shù)調(diào)用/返回值傳遞duble*atrix,*pDest;atrix=neduble_size*_size;SafeArrayAessData(ut.parray,(vid*)pDest);/獲得數(shù)據(jù)指針,訪(fǎng)問(wèn)數(shù)據(jù)epy(atrix,pDest,_size*_size*sizef(duble);/拷貝數(shù)據(jù)矩陣SafeArrayUnaessData(ut.parray);/釋放數(shù)據(jù)指針,取消訪(fǎng)問(wèn)SafeArrayDestry
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO 4064-2:2024 EN Water meters for cold potable water and hot water - Part 2: Test methods
- 2025年度廠房施工合同糾紛解決協(xié)議(新版)
- 2025年度漁船租賃及船舶保險(xiǎn)風(fēng)險(xiǎn)評(píng)估與管理合同
- 2025年度金融中心保安服務(wù)合同范本
- 2025年度寵物行業(yè)標(biāo)準(zhǔn)化體系建設(shè)合同
- 2025年地面瞄準(zhǔn)設(shè)備、定位定向設(shè)備項(xiàng)目發(fā)展計(jì)劃
- 幼兒園農(nóng)業(yè)與自然知識(shí)教育計(jì)劃
- 非營(yíng)利組織保安工作總結(jié)與志愿者管理計(jì)劃
- 班級(jí)學(xué)風(fēng)建設(shè)的探索與實(shí)踐計(jì)劃
- 班級(jí)建設(shè)與發(fā)展的長(zhǎng)遠(yuǎn)規(guī)劃計(jì)劃
- 高中校長(zhǎng)在2025春季開(kāi)學(xué)典禮上的講話(huà)
- 2025年六年級(jí)數(shù)學(xué)下冊(cè)春季開(kāi)學(xué)第一課(人教版) 2024-2025學(xué)年 典型例題系列(2025版)六年級(jí)數(shù)學(xué)下冊(cè)(人教版) 課件
- 高教版2023年中職教科書(shū)《語(yǔ)文》(基礎(chǔ)模塊)上冊(cè)教案全冊(cè)
- 存款代持協(xié)議書(shū)范文模板
- 2023年部編人教版三年級(jí)《道德與法治》下冊(cè)全冊(cè)課件【全套】
- 光伏項(xiàng)目施工總進(jìn)度計(jì)劃表(含三級(jí))
- 醫(yī)保基金監(jiān)管培訓(xùn)課件
- 部編版小學(xué)語(yǔ)文四年級(jí)下冊(cè)教師教學(xué)用書(shū)(教學(xué)參考)完整版
- 煤礦職業(yè)衛(wèi)生培訓(xùn)課件2023
- 口腔常見(jiàn)疾病診療常規(guī)
- 中職《機(jī)械基礎(chǔ)》全套教學(xué)課件(完整版)
評(píng)論
0/150
提交評(píng)論