袁 勇,池兴颖
(遵义师范学院网络管理中心,贵州遵义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
袁 勇,男,贵州遵义人,遵义师范学院网络管理中心网络工程师,硕士,研究方向:数字优化仿真技术及应用。