摘 要 文章探讨了Visual C++ 6.0数据库技术和 MATLAB 6.5 强大的数值计算和图形显示功能
利用Matlab 和VC编制软件对数据进行处理,提高了数据处理的效率
关键词 Matlab;数据处理系统;数据库 1 引言 Visual C++ 是目前综合性最高、最强大的软件开发工具之一
Matlab是一种高性能的数值计算和可视化软件,在数值分析、信号处理、系统辨识、特殊函数和图形等方面具有广泛的应用
由于测试结果有上百万个数据量,且数据存储在数据库中,为了便于研究处理数据的方法,获得可靠的测试结果,本文探讨利用Microsoft Visual C++ 6.0数据库技术 和 MATLAB 6.5 强大的数值计算和图形显示并联合编制软件对数据进行处理
我们把 Matlab与Visual C++结合起来,简化复杂的数据处理方法研究,体验数据处理的工作效率和即时性
此系统在某次数据处理系统中得到广泛的应用
2 数据处理系统的关键技术 数据处理系统是利用Microsoft Visual C++ 6.0数据库技术 和 MATLAB 6.5 强大的数值计算和图形显示并联合处理测量数据的系统,数据处理系统涉及到Microsoft Visual C++ 6.0数据库技术和Microsoft Visual C++ 6.0与MATLAB的接口技术,为了能够使系统具有可移植性和即时性,系统使用的数据库技术是ADO数据库访问技术,Microsoft Visual C++ 6.0与MATLAB的接口技术是引擎技术
2.1 ADO数据库访问技术 ADO(ActiveX Data Object)是一种基于COM(组件对象模型)的自动化接口(IDispatch)技术,并以OLE DB(对象连接和镶入的数据库)为基础,经过OLE DB包装后的数据库访问技术,利用它可以快速的创建数据库应用程序
这要比ODBC API、DAO、RDO都要简单易用、灵活
ADO数据库开发的基本流程如下: (1)初始化COM库,引入ADO库定义文件
(2)用Connection对象连接数据库
(3)利用建立好的连接,通过三个智能指针执行查询、处理结果记录集和SQL命令,使用完毕后关闭连接释放对象
2.1.1 初始化COM库 在MFC中采用一种方法来实现初始化COM,这种方法只需要一条语句便可以自动为我们实现初始化COM和结束时关闭COM的操作,语句如下所示:AfxOleInit()
2.1.2 引入ADO库定义文件 用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序(DLL、EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.dll的附属资源中,只需要直接用#import引用它即可
可以直接在Stdafx.h文件中加入下面语句来实现: #import "c:program filescommon filessystemado msado15.dll" no_namespace rename ("EOF", "adoEOF") 2.1.3 三个智能指针 数据处理系统使用前面用#import语句引用类型库时,生成的包装类.tlh中声明的智能指针中有这三个_ConnectionPtr、_RecordsetPtr和_CommandPtr指针,数据处理系统通过这三个智能指针使用ADO的连接数据库、SQL命令、记录集的遍历、更新操作
2.2 MATLAB与Visual C++的接口技术 MATLAB系统提供一个非常重要的组件—MATLAB应用程序接口,它可以向MSATLAB环境传送数据也可从MATLAB环境接收数据;Visual C++可以调用MATLAB编写的程序,在这里数据处理系统采用MATLAB引擎库,MATLAB引擎库包含了若干个控制MATLAB引擎的函数,如表1所示
表1 MATLAB引擎的函数表 函数名 函数功能 engOpen 启动MATLAB引擎 engClose 关闭MATLAB引擎 engGetArray 从MATLAB引擎中获取一个MATLAB矩阵 engPutArray 向MATLAB引擎发送一个MATLAB矩阵 engEvalString 执行于一个MATLAB命令或自编的MATLAB函数 engOutputBuffer 创建一个存储MATLAB文本输出的缓冲区 数据处理系统主要应用的引擎函数是engEvalString、engOpen、engClose等函数
下面通过简单的例子说明: #include "stdafx.h" #include "engine.h" int MatlabDraw() { Engine *ep; if (!(ep = engOpen(NULL))) { MessageBox ((HWND)NULL,"Can#39;t start MATLAB engine","Matlab Draw",MB_OK); return 0; } /*启动MATLAB引擎*/ engEvalString(ep, "x=0:0.01:2*pi;y=sin(x);plot(x,y);"); /*执行MATLAB命令:绘图*/ engClose(ep); /*关闭MATLAB引擎*/ return 1; }