袁 勇,池興穎
(遵義師范學(xué)院網(wǎng)絡(luò)管理中心,貴州遵義563000)
Matlab與VC++、Oracle數(shù)據(jù)庫(kù)接口技術(shù)研究及實(shí)現(xiàn)
袁 勇,池興穎
(遵義師范學(xué)院網(wǎng)絡(luò)管理中心,貴州遵義563000)
Matlab將高性能的數(shù)值計(jì)算、符號(hào)計(jì)算和可視化集成一體,并有豐富的工具箱,使用方便,編程高效;VC++是基于Windows平臺(tái)的可視化集成開(kāi)發(fā)環(huán)境,功能強(qiáng)大;Oracle數(shù)據(jù)庫(kù)是目前最流行的數(shù)據(jù)庫(kù)軟件產(chǎn)品之一,具有完整的數(shù)據(jù)管理功能。Matlab與VC++、Oracle數(shù)據(jù)庫(kù)接口實(shí)現(xiàn),可以取長(zhǎng)補(bǔ)短,發(fā)揮各自的優(yōu)勢(shì),為編程人員帶來(lái)諸多便利。
Matlab;VC++;Oracle數(shù)據(jù)庫(kù);接口技術(shù)
Matlab是美國(guó)MathWorks公司研發(fā)的一種科學(xué)計(jì)算軟件,它將高性能的數(shù)值計(jì)算、符號(hào)計(jì)算和可視化集成在一起,并提供大量的內(nèi)置函數(shù)及功能豐富的工具箱,使用方便,編程效率高。然而,Matlab是一種解釋性語(yǔ)言,運(yùn)行效率低,不適合作為通用的編程平臺(tái)。VC++是 Microsoft公司推出的一個(gè)基于Windows平臺(tái)的可視化的集成開(kāi)發(fā)環(huán)境,在運(yùn)行速度、功能性以及應(yīng)用程序界面開(kāi)發(fā)方面功能強(qiáng)大,但在數(shù)值計(jì)算和圖形繪制方面,VC++并不具備太多優(yōu)勢(shì)。Oracle是美國(guó)Oracle公司(甲骨文)提供的以分布式數(shù)據(jù)庫(kù)為核心的一組軟件產(chǎn)品,是目前最流行的客戶(hù)/服務(wù)器(CLIENT/SERVER)或B/S體系結(jié)構(gòu)的數(shù)據(jù)庫(kù)之一。
實(shí)現(xiàn)Matlab與VC++接口技術(shù),可以提高編程效率。實(shí)現(xiàn)Matlab與Oracle數(shù)據(jù)庫(kù)接口技術(shù),可以將數(shù)據(jù)庫(kù)中的數(shù)據(jù)可視化地顯示出來(lái),使數(shù)據(jù)更形象化的展示給用戶(hù),為數(shù)據(jù)使用人員帶來(lái)便利。
1.1 Matlab與VC++接口技術(shù)研究
Matlab與 VC++連接方式主要有三種:通過(guò)Matlab引擎的方式;Matlab編譯器(MCC);調(diào)用COM組件實(shí)現(xiàn)[1]。
Matlab引擎采用客戶(hù)機(jī)/服務(wù)器 (Client/Server)的方式,提供了一組MATAB API函數(shù),通過(guò)調(diào)用這些函數(shù)實(shí)現(xiàn)應(yīng)用程序進(jìn)程之間的數(shù)據(jù)傳遞。MCC是Matlab中經(jīng)過(guò)優(yōu)化的編譯器,用戶(hù)可以將Matlab數(shù)學(xué)庫(kù)、圖形庫(kù)和界面的Matlab程序轉(zhuǎn)化為獨(dú)立于Matlab的EXE應(yīng)用程序和DLL動(dòng)態(tài)連接庫(kù),在VC中編寫(xiě)程序界面并加載調(diào)用動(dòng)態(tài)連接庫(kù),實(shí)現(xiàn)兩者之間的連接。COM(Component Object Model),即組件對(duì)象模型,它是一個(gè)開(kāi)放的組件標(biāo)準(zhǔn),有相當(dāng)強(qiáng)的擴(kuò)充與擴(kuò)展能力。COM規(guī)范了對(duì)象模型和編程要求,使得COM對(duì)象可以和其他對(duì)象之間相互操作。用COM規(guī)范定義的組件模型除了具有基本的面向?qū)ο筇匦匀绶忾]、多態(tài)性等特點(diǎn)外,基于COM的混合編程方法也是Mathworks公司推薦使用的方法。
1.2 基于COM的Matlab與VC++接口實(shí)現(xiàn)
用COM組件的方式實(shí)現(xiàn)VC++與Matlab的混合編程技術(shù)。其具體步驟如下:
(1)編寫(xiě)能在Matlab平臺(tái)下運(yùn)行的相關(guān)m函數(shù)文件。
function test_huatu()//繪制[-10,10]區(qū)間的sin函數(shù)
(2)在Matlab6.5的Command Window中輸入comtool命令,即可出現(xiàn)COM編輯界面,如圖1所示。
圖1 COM編輯界面
(3)建立工程,在COM編輯界面中。選擇File—〉New Project,彈出圖2的工程設(shè)置界面;在設(shè)置界面的“Component name”項(xiàng)中填寫(xiě)組件名稱(chēng)“component”,這時(shí)候會(huì)自動(dòng)生成類(lèi),將自動(dòng)生成類(lèi)選中并Remove掉。在“Classname”項(xiàng)中填寫(xiě)類(lèi)名稱(chēng)“test_ huatu”,然后將test_huatu類(lèi)添加,并在Compileroptions中將Builddebugversion和Showverboseoutput勾選。
圖2 COM工程設(shè)置圖
(4)給工程添加文件,選中COM編輯界面中的test_huatu工程,點(diǎn)擊上面的AddFile,并將已經(jīng)寫(xiě)好的名為“test_huatu”的m函數(shù)添加進(jìn)來(lái)。
(5)生成COM組件。在編輯框中點(diǎn)擊Build—〉COMObject,出現(xiàn)如圖3所示,即為組件生成成功。
圖3 組件構(gòu)建成功圖
(6)VC調(diào)用生成的COM組件。
1)在VC中建立名為test的基于對(duì)話(huà)框的MFC (exe)工程,并在該工程對(duì)話(huà)框中添加按鈕。
2)將 component_idl.h、component_idl_i.c和mwcomtypes.h文件拷貝到VC建立的工程test目錄下。前兩個(gè)是COM組件編譯時(shí)生成的,最后一個(gè)在 Matlab安裝路徑中(D:MATLAB6p5externinclude)。
3)將上面三個(gè)文件加入工程:工程-〉添加工程-〉Files,選擇剛剛拷到目錄下的 component_idl.h、 component_idl_i.c和mwcomtypes.h三個(gè)文件,并為程序添加頭文件component_idl.h和mwcomtypes.h。
4)設(shè)置預(yù)編譯頭文件:工程-〉設(shè)置,選擇C/C++項(xiàng)precomplied Headers/M自動(dòng)使用預(yù)補(bǔ)償頁(yè)眉。
5)為相應(yīng)的菜單添加函數(shù)代碼,就可以在VC中調(diào)用相應(yīng)的Matlab程序。下面給出其示
hr=pImyclass-〉test_huatu();
6)最終通過(guò)調(diào)用com組件繪制圖形(如圖4)。
圖4 繪制sin曲線(xiàn)圖
2.1 Matlab連接Oracle數(shù)據(jù)庫(kù)接口技術(shù)研究
Matlab連接Oracle數(shù)據(jù)庫(kù)的方式有兩種,通過(guò)ODBC或者JDBC連接到數(shù)據(jù)庫(kù)。此處,我們只討論通過(guò)ODBC連接到Oracle數(shù)據(jù)庫(kù)。通過(guò)Matlab讀取Oracle數(shù)據(jù)庫(kù)中的數(shù)據(jù),并繪圖。為了滿(mǎn)足實(shí)驗(yàn)需求,首先在Oracle數(shù)據(jù)庫(kù)的scott用戶(hù)下建立測(cè)試用表matora.
然后向matora表中插入數(shù)據(jù){(1,1);(2,4);(3,9); (4,16);(5,25)}。
2.2 通過(guò)ODBC實(shí)現(xiàn)Matlab與Oracle數(shù)據(jù)庫(kù)的連接
(1)在Windows下“開(kāi)始”→“控制面板”→“管理工具”→“數(shù)據(jù)源(ODBC)”
(2)選擇“用戶(hù)DSN”→“添加”→選擇“Oraclein OraDb10g_home1”,點(diǎn)擊“完成”。
(3)在Oracle ODBC Driver Configuration中將Data Source Name設(shè)置為test。
(4)在Matlab中建立到Oracle的連接測(cè)試。
conn=database('test','scott','123456');(回車(chē)即可)//scott為數(shù)據(jù)庫(kù)用戶(hù),123456為修改后的scott用戶(hù)的密碼。
Matlab與VC++、Oracle數(shù)據(jù)庫(kù)各有優(yōu)勢(shì),將它們的優(yōu)勢(shì)整合,規(guī)避弱點(diǎn),在編程開(kāi)發(fā)過(guò)程中將更為高效,從而節(jié)約人力、財(cái)力。本文以Matlab7.0與VC+ +6.0、Oracle10G為環(huán)境,研究了Matlab與VC及Or-acle的接口技術(shù),并進(jìn)行了實(shí)現(xiàn),為使用Matlab與VC++、Oracle數(shù)據(jù)庫(kù)聯(lián)合開(kāi)發(fā)的軟件開(kāi)發(fā)人員提供一些編程參考,進(jìn)而充分利用Matlab軟件的優(yōu)勢(shì)來(lái)提高編程效率。
圖5 matlab調(diào)用Oracle中數(shù)據(jù)繪制y=x2函數(shù)圖
[1]岳玉芳,尤忠生,張玉雙.基于COM的VC與Matlab混合編程[J].微機(jī)發(fā)展,2005,15(5):46-48.
[2]李芳,徐麗.基于COM組件的Matlab7_x與VC_6_0接口技術(shù)及實(shí)際應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件,2009,26(2):131-134.
[3]張志涌.精通MATLAB6.5版教程[M].北京:北京航天航空大學(xué)出版社,2003.
[4]王彬,代彥波,顏鵬博.Oracle10g簡(jiǎn)明教程[M].北京:清華大學(xué)出版社,2006.
(責(zé)任編輯:朱 彬)
the Researches and Realization of Interfacing of Matlab and VC++and Oracle Data
YUAN Yong,CHI Xing-ying
(Network Management Center,Zunyi Normal College,Zunyi 563000,China)
Matlab,an integration of numerical computing,symbolic computation and visualization,has a rich toolbox which is easy to use and efficient in programming;VC++,a visually integrated development environment,is based on the Windows platform and very powerful;Oracle database,one of the most popular database products,is possessed of full data management capabilities.And the realization of interfacing of Matlab and VC++and Oracle Data can complement each other and bring each other’s superiority into full play, thus bring more conveniences to programmers.
Matlab;VC++;Oracle data;interfacing
TP311
A
1009-3583(2014)-0072-04
2014-04-22
袁 勇,男,貴州遵義人,遵義師范學(xué)院網(wǎng)絡(luò)管理中心網(wǎng)絡(luò)工程師,碩士,研究方向:數(shù)字優(yōu)化仿真技術(shù)及應(yīng)用。