袁 勇,池興穎
(遵義師范學院網絡管理中心,貴州遵義563000)
Matlab與VC++、Oracle數據庫接口技術研究及實現
袁 勇,池興穎
(遵義師范學院網絡管理中心,貴州遵義563000)
Matlab將高性能的數值計算、符號計算和可視化集成一體,并有豐富的工具箱,使用方便,編程高效;VC++是基于Windows平臺的可視化集成開發環境,功能強大;Oracle數據庫是目前最流行的數據庫軟件產品之一,具有完整的數據管理功能。Matlab與VC++、Oracle數據庫接口實現,可以取長補短,發揮各自的優勢,為編程人員帶來諸多便利。
Matlab;VC++;Oracle數據庫;接口技術
Matlab是美國MathWorks公司研發的一種科學計算軟件,它將高性能的數值計算、符號計算和可視化集成在一起,并提供大量的內置函數及功能豐富的工具箱,使用方便,編程效率高。然而,Matlab是一種解釋性語言,運行效率低,不適合作為通用的編程平臺。VC++是 Microsoft公司推出的一個基于Windows平臺的可視化的集成開發環境,在運行速度、功能性以及應用程序界面開發方面功能強大,但在數值計算和圖形繪制方面,VC++并不具備太多優勢。Oracle是美國Oracle公司(甲骨文)提供的以分布式數據庫為核心的一組軟件產品,是目前最流行的客戶/服務器(CLIENT/SERVER)或B/S體系結構的數據庫之一。
實現Matlab與VC++接口技術,可以提高編程效率。實現Matlab與Oracle數據庫接口技術,可以將數據庫中的數據可視化地顯示出來,使數據更形象化的展示給用戶,為數據使用人員帶來便利。
1.1 Matlab與VC++接口技術研究
Matlab與 VC++連接方式主要有三種:通過Matlab引擎的方式;Matlab編譯器(MCC);調用COM組件實現[1]。
Matlab引擎采用客戶機/服務器 (Client/Server)的方式,提供了一組MATAB API函數,通過調用這些函數實現應用程序進程之間的數據傳遞。MCC是Matlab中經過優化的編譯器,用戶可以將Matlab數學庫、圖形庫和界面的Matlab程序轉化為獨立于Matlab的EXE應用程序和DLL動態連接庫,在VC中編寫程序界面并加載調用動態連接庫,實現兩者之間的連接。COM(Component Object Model),即組件對象模型,它是一個開放的組件標準,有相當強的擴充與擴展能力。COM規范了對象模型和編程要求,使得COM對象可以和其他對象之間相互操作。用COM規范定義的組件模型除了具有基本的面向對象特性如封閉、多態性等特點外,基于COM的混合編程方法也是Mathworks公司推薦使用的方法。
1.2 基于COM的Matlab與VC++接口實現
用COM組件的方式實現VC++與Matlab的混合編程技術。其具體步驟如下:
(1)編寫能在Matlab平臺下運行的相關m函數文件。
function test_huatu()//繪制[-10,10]區間的sin函數

(2)在Matlab6.5的Command Window中輸入comtool命令,即可出現COM編輯界面,如圖1所示。

圖1 COM編輯界面
(3)建立工程,在COM編輯界面中。選擇File—〉New Project,彈出圖2的工程設置界面;在設置界面的“Component name”項中填寫組件名稱“component”,這時候會自動生成類,將自動生成類選中并Remove掉。在“Classname”項中填寫類名稱“test_ huatu”,然后將test_huatu類添加,并在Compileroptions中將Builddebugversion和Showverboseoutput勾選。

圖2 COM工程設置圖
(4)給工程添加文件,選中COM編輯界面中的test_huatu工程,點擊上面的AddFile,并將已經寫好的名為“test_huatu”的m函數添加進來。
(5)生成COM組件。在編輯框中點擊Build—〉COMObject,出現如圖3所示,即為組件生成成功。

圖3 組件構建成功圖
(6)VC調用生成的COM組件。
1)在VC中建立名為test的基于對話框的MFC (exe)工程,并在該工程對話框中添加按鈕。
2)將 component_idl.h、component_idl_i.c和mwcomtypes.h文件拷貝到VC建立的工程test目錄下。前兩個是COM組件編譯時生成的,最后一個在 Matlab安裝路徑中(D:MATLAB6p5externinclude)。

3)將上面三個文件加入工程:工程-〉添加工程-〉Files,選擇剛剛拷到目錄下的 component_idl.h、 component_idl_i.c和mwcomtypes.h三個文件,并為程序添加頭文件component_idl.h和mwcomtypes.h。
4)設置預編譯頭文件:工程-〉設置,選擇C/C++項precomplied Headers/M自動使用預補償頁眉。
5)為相應的菜單添加函數代碼,就可以在VC中調用相應的Matlab程序。下面給出其示
hr=pImyclass-〉test_huatu();
6)最終通過調用com組件繪制圖形(如圖4)。

圖4 繪制sin曲線圖
2.1 Matlab連接Oracle數據庫接口技術研究
Matlab連接Oracle數據庫的方式有兩種,通過ODBC或者JDBC連接到數據庫。此處,我們只討論通過ODBC連接到Oracle數據庫。通過Matlab讀取Oracle數據庫中的數據,并繪圖。為了滿足實驗需求,首先在Oracle數據庫的scott用戶下建立測試用表matora.

然后向matora表中插入數據{(1,1);(2,4);(3,9); (4,16);(5,25)}。
2.2 通過ODBC實現Matlab與Oracle數據庫的連接
(1)在Windows下“開始”→“控制面板”→“管理工具”→“數據源(ODBC)”
(2)選擇“用戶DSN”→“添加”→選擇“Oraclein OraDb10g_home1”,點擊“完成”。
(3)在Oracle ODBC Driver Configuration中將Data Source Name設置為test。
(4)在Matlab中建立到Oracle的連接測試。
conn=database('test','scott','123456');(回車即可)//scott為數據庫用戶,123456為修改后的scott用戶的密碼。

Matlab與VC++、Oracle數據庫各有優勢,將它們的優勢整合,規避弱點,在編程開發過程中將更為高效,從而節約人力、財力。本文以Matlab7.0與VC+ +6.0、Oracle10G為環境,研究了Matlab與VC及Or-acle的接口技術,并進行了實現,為使用Matlab與VC++、Oracle數據庫聯合開發的軟件開發人員提供一些編程參考,進而充分利用Matlab軟件的優勢來提高編程效率。

圖5 matlab調用Oracle中數據繪制y=x2函數圖
[1]岳玉芳,尤忠生,張玉雙.基于COM的VC與Matlab混合編程[J].微機發展,2005,15(5):46-48.
[2]李芳,徐麗.基于COM組件的Matlab7_x與VC_6_0接口技術及實際應用[J].計算機應用與軟件,2009,26(2):131-134.
[3]張志涌.精通MATLAB6.5版教程[M].北京:北京航天航空大學出版社,2003.
[4]王彬,代彥波,顏鵬博.Oracle10g簡明教程[M].北京:清華大學出版社,2006.
(責任編輯:朱 彬)
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
袁 勇,男,貴州遵義人,遵義師范學院網絡管理中心網絡工程師,碩士,研究方向:數字優化仿真技術及應用。