MATLAB与Visual C++6.0混合编程的实现


!墨垡量i苎查!!!!i±苎!塑整苎!些塑■暖固日臣

MATLAB与Visual c十+6.o混合编程的实现
鲁强,孔莫会
(华北电力大学电子与通信工程系河北保定07l003)

摘要:针对MATLAB与visualC++软件的各卣楠程优势,提出了一种将MATLAB中蝙译的.m函数文件生成可

脱蠢MATLAB环境的动态连接库,然后在VC环境下开发应用程序界面井调用动态连接库.实现通过蝙译器将二者有娃
结合起来。 关键词;visual c‘+;MATLAB,动态连接库;引擎}蝙译嚣 中围分类号:TP312

文献标识码:B

文章编号:l004—373x(2003)01一027一02

Method

of mixed prOgramming using
LU

VC柚d MATLAB
Po舯r Un㈣r¥】ty,且aod{og?071003,Chm MATLAB.First make a.m“Inction th applicalion program

Qla“g,KONG Yi“ghul
Ckna

(Dcpa㈣nIof E㈨一ic州communicatbn E吣inecring,Nortb
Abstmct:Produces


EIMt…,c

kind of method of mixed programml“g by the advant89。s of VC and

file which is independent of matIab environment;second transfer the.m function埘e to【)LL;last develop interface and loading DLL Key啊ords:Visual
under

the environⅢent of VC.So it compIetes the best int。gration by compjIer.

C++;MATLAB;D11,e“ginel compiler

1引





ATLAB与Vc混合编程方法简介

MATI,AB是Mathworks公司推出的针对数值计 算的交互式软件,是一套商效率的数值计算和可视化 软件,具有极其强大的数值分析、矩阵运算、信号处 理和图形显示功能;MATLAB以其强大的数据处理 能力和丰富的工具箱使得他的编程极为简单,可大幅 缩短应用程序开发周期,提高编程效率。但由于其为 解释性执行语言,执行效率低、速度慢,不适应实时 性较高场合。而Visual c”是windows平台下强大的 应用程序开发环境,基于Vc几乎可以开发从底层软 件到直接面向用户的各个方面的软件。MATI。AB的 应用程序界面开发功能远不如Vc方便强大,Vc在工 程计算方面则要比MATI,AB繁琐得多。因此实现 MATI。AB与Vc的混合编程,可以为科研工作和工程 开发提供强大的技术支持。 要实现Vc、MATIAB混合编程必须解决两方面 的问题:一是接口的问题,包括Vc语言程序对 MATIAB函数的调用及数据的互传;二是数据组织 问题。下面就MATI。AB 6.o与VC++6.o的混合编程 方法加以讨论。

2.1通过MATI.AB引擎与VC实现互连 MATI,AB提供了2种Activex技术:Activex自 动化和Activex组件集成。MATI。AB引擎 (ENGINE)采用了客户机/服务器(cI,IENT/ sERVER)的计算模式,通过MATI.AB应用程序接口 (API)中有关函数。在VC环境中调用MATl。AB函 数,但此种方法需要MATI。AB后台支持,因此系统必 须安装MATI。AB。由于其无法脱离MATLAB运行环 境,这里不做主要介绍。
2.2

通过MATI。AB编译器实现与VC互连 在MATI。AB环境中将MATI。AB函数编译成可

以脱离MATLAB环境使用的动态连接库,在vc环境 中编写应用程序界面并加载调用动态连接库,实现二 者之间的无缝连接,此种方法关键是对MATI。AB与 Vc接口进行编程。由于其完全脱离MATl,AB环境, 因此得到广泛应用。 3通过MATLAB编译器实现与Vc互连的具体方法
MATI。AB 6.O采甩了全新的操作界面,为

ATI。AB代码、变量、数据文件、图形的存取提供了方
收藕日期。2002一儿一02

便快捷的途径。新加入的多种交互式工具也使
27

万   方数据

..



壁!丝垒!!:垒堡鱼∑垄!生.曼::!:Q墨全熊垦塑塞墨
3.5对VC编译环境进行设置



一——

ATI,AB图形的绘制、导人、导出操作简单易行。针 时以上特点.给出了具体实现方法。
3.1

选择Vc编译器主菜单下tools—options—
dlrectories,选择show dlrectories for列表框,把

时MATI。AB编译环境进行设置

(1)在MA丁I,AB环境中运行mex-setup命令,按 屏幕提示选择有关选项,此处选编译器为“。M【crosoft
visual

MATI。AB的包含文件路径C:\matlab6p1\extern\ includc和库文件路径c;\matlab6p1\extern\lib\ win3z\microsoft\msvc60添加到VC路径中去。 选择vc编译器主菜单下project呻sclu“g—c/c¨ 斗general—prepf。cessor definmons:加入MsVC, MswIND,IBMPc选择VC编译器主菜单下p呻Ject— setting一1ink—general—object/library nlnlodules下
加入Iibnlx.1-b,Iibmat.1ib,llIbnlallb.1-h,11hmm—
file.1ib,funcl.1ib。

C/C++

version6.0inC:

\Program

Files\

Micros。“visual Studio,路径按实际情况选择。

(2)在MATI,AB环境中运行mbuild 令,设置方法同上。 3.2编辑一个函数文件

sctup命

为说明问题,举一简单例子。首先在MATI。AB环 境下编写一个计算数字信号滤波的func.m函数文件,
程序如下:

选择VC编译器主菜单下project—esetting—C/
c++一code generation÷use run—time 1ibrary:
muIitithread dll。

改为

3.6加入头文件

罂安斜蒜 m兰叫吐乩珊m

蒜飘~m 3-=化埘二:



嚣恼m

在diaIogedIg.cpp文件中引入头文件#incIude ”funclth”和#include”func“” 3.7进行接口编程 本实例要求在输入窗口键人参数后,点击确定按 钮,输出窗口显示经MATI。AB计算后的滤波结果。确
1,C—Wlib:

3.3将上述func.m文件转化为脱离MATI。AH环境

的动态连接库funcl.dIi
在MATI。AB环境中运行mcc fu∽1


定按钮消息处理函数程序如下:
void(:既alogDlg::0n0K()
TODo:Add
extra

link:1ib

func.m,运行后会生成共享动态连
func.c, func,h, funcl.c,

接库及其他一些文件,funcl.exp,funcl.e。port,
funcl.h, funcl.dll funcl.1ih,

validatlon hero

UDdateData(TRUE); funclInitjalize(); double

对funcl.h文件做一些修改,在#inclIlde ”libmatlb.h”语句后加入c代码扩展声明extern {,最后一行#endif之前加人一行)。 3.4在Vc中编译一个基于对话框的MFc工程 在Vc++6.o环境中创建基丁对话框的MFc工 程,命名为dialog,对话框资源编译如图1所示:
r,c”

a[1]; //取Vc输人参数’放到数组中//

a[o]=m—i“;
mxArray*A; mxArray’B;

A=mlf【)0ubIeMatrix(1,I,a,NUI。I,),

B=m】mJnc(A);

//调用matlab函数计算.并将结 果存到数组矩阵n//

double。md_mxGetPr(B)I

m—out=md[o];//将结果传送列vc环境变量中//
funclTcrmlnate(); UpdateDara(FALSE);



3.8编译连接运行程序 经V(:编译器编译连接生成可执行文件,输入参 数运行后显示如图2所示。
4结论

采用目前较为流行的windows应用程序开发环
图1对话框资源

境VC完成图形界面设计、数据管理、低层I/o操作,利 用MATI。AB数学库完成软件核心算法设计,很大程 度上降低了编程难度和工作量,
(下转第31页)

将MATI—AR环境下编译形成的文件mrlcl.h, funcl?dll,funcl?lib,func.h复制到当前工程目录下。
28

万   方数据

!墨垡皇±丝查!;!!!主签!塑整茎!!!塑-团蕊蟊盈孤■
以前的对象模型,如DAo和RDO都是层次型的, 一个较低的数据对象如Rec。rdset是几个较高层次的 对象如EnVironment和Que‘yDef的子对象。但ADO 却不同,他定义了一组平面型顶级对象,最重要的3个 ADO对象是connection,Recordset和command。 connection对象用于建立应用程序和数据源的连 接;command对象用于定义一个sQL语句、一个存储 过程或其他对数据进行操作的命令;Recordset对象保 存执行命令后返回的记录集。 以下程序段是利用AI)()对象实现对数据库的操 作:
DimcNAs New

通过调用Rec。fdset对象的其他方法,可实现对记 录集的修改、删除,查询等操作。


挂 ’一

谭 ~

VB提供了很多方法实现对数据库的操作,其中 DAO主要实现对IsAM数据库的访问,RD0提供对 ODBc数据源的接口,RDO和DAO都已发展为相当 成熟的技术,在VB 6.o之前是主要的数据库访问技 术,而Active
Data

Objects(ADO)作为微软推出的新
DB

一代数据库接口,被设计同新的数据访问层OLE

Provider一起协同工作,以提供通用数据访问 AⅨ)DB.connection
’定义connecti。n对象变量

(uniVersalDataAccess),他向VB程序员提供了很多 好处,包括易于使用,熟悉的界面,高速度以及较低

譬:冀竺!黧等薹泛兰譬。鬈2銎蔫誊鬻裟笔翌篓耋墨 ’创建connection对象的实例.设置其OLEDBProvidef和琏接
的数据潦

…y州川㈨艿帅…~。叫“………“『t口z口 的内存占用(已实现AD02.o的M。。d015.d11需要占

用342K内存,比RDO的Msrd020.dlI的368K略小, 大约是DA03.5的Da0350.du所占内存的60%),由于 以上原因,AD0将逐渐代替其他数据访问接口,成为 VB访问数据库的主要方式。 参 [1]
。。


cN?co““ec№ns‘n警i“9:ovid。r=M1c,?soF-‘沁?。1edb:~
,调用ope。方法建立连接
cN-open

7指定打开Records el所使用的记录锁定方法(默认值是只读)
Rs,L。ckType=adLockoptirnisIi。

‘调用鼬c钟dset对象的【)pen方诖打开记录集


Basic





霉骡警ords引对象的Addne叭upd乩。方法给记录集添加记录
W.th RS
-AddNew

慧‘:竺明”:‘ud::三鬯..,



~………一;

潘小轰.visual

五亲j’中国砉化出版枉,葛品。…“…~
JL承:中目q1(1皿厩干I’1,F,

6.o应用开发技术[M].

[2] [3]

‘::三:窆;:=:。二二二::8”。 .Flelds(”sex”)=Txt咄
.Fields(”class一)=Tx{class

’~p o…o’…。…’川价…队……。 计教程[M].苏州:苏州大学出版社,1 999

陈华生.牛又奇,孙建国.visual Basic程序设 龚沛曾,陆慰民,杨志强.Visual Basic程序设

.::譬?”

计教程(6.o版)[M].北京:高等教育出版杜,

作者简介





女,1071年出生.江苏沭阳人,淮阴工学院计算机系讲师

(上接第28页)

缩短开发周期,提高软件可靠性。尤其利用编译器凋用 MATI,AB动态连接库实现脱离MATI。AB环境下二者 的紧密结合,更极大拓展了MATI,AB的应用范围。 参考文献 [1] [2] [3]
图2输出结果

刘志俭.MATI.AB应用程序接口用户指南 [M].北京;科学出版社,2000 郝红伟.MATIAB 6.o实例教程[M].北京: 中国电力出版社,2001
李明柱?Visual c“最新编程实践与技巧[M].

北京:航空航天大学出版社,2000

作者茼介鲁强

男,华北电力太学硝士研究生.主要从事多媒体通信技术的研究。

孔美备女,华北电力是学电子与通信工程系剐教授,主要从事通信工程及多媒体通信技术方面的教学与科研工作。 31

万   方数据

MATLAB与Visual C++6.0混合编程的实现
作者: 作者单位: 刊名: 英文刊名: 年,卷(期): 被引用次数: 鲁强, 孔英会 华北电力大学,电子与通信工程系,河北,保定,071003 现代电子技术 MODERN ELECTRONIC TECHNIQUE 2003(1) 9次

参考文献(3条) 1.李明柱 VisualC++最新编程实践与技巧 2000 2.郝红伟 MATLAB60实例教程 2001 3.刘志俭 MATLAB应用程序接口用户指南 2000

引证文献(9条) 1.赖宏慧 MATLAB和VC混合编程在时滞混沌系统仿真中的应用[期刊论文]-科技广场 2008(12) 2.汪红兵.唐剑.毛万标.张利强.张若定.范植华 Matlab_RTI中间件实现及应用研究[期刊论文]-计算机工程与设计 2006(20) 3.唐剑.汪红兵.吴跃.佘春东.张利强 飞行仿真系统的软件架构研究[期刊论文]-计算机应用 2006(6) 4.唐剑 一种基于HLA的仿真架构的研究与实现[学位论文]硕士 2006 5.江永成.解永生.诗福山 锅炉燃烧系统智能控制策略及其在MCGS中的实现方法[期刊论文]-化工自动化及仪表 2005(2) 6.江永成 热电站DCS设计与智能控制在组态软件中实现方法研究[学位论文]硕士 2005 7.吴金艳 面向分布式仿真的省级森林承载力评价系统的研究[学位论文]硕士 2005 8.叶万富 定子双绕组感应发电系统的研究[学位论文]硕士 2005 9.叶万富.胡育文 C++Builder与MATLAB/SIMULINK的接口[期刊论文]-计算机仿真 2004(10)

本文链接:http://d.g.wanfangdata.com.cn/Periodical_xddzjs200301010.aspx


相关文档

更多相关文档

实现Visual C++6.0 与MATLAB的混合编程
MATLAB与C/VISUAL C++混合编程的实现
基于Visual+C和MATLAB的联合编程方法的研究
Visual C++与Matlab的界面混合编程
用MATLAB和Visual C++混合编程及应用
Visual C#与Matlab混合编程在可视化软件中的应用
利用MATCOM实现VISUAL C++与MATLAB的混合编程2
Visual C++与Matlab混合编程的研究与实现
Matlab与Visual C++混合编程学习笔记
利用MATCOM实现VISUAL C++与MATLAB的混合编程1
用MATLAB和Visual C++混合编程及应用
MATLAB与C/VISUAL C++混合编程的实现
Matlab与C++混合编程
VC++与MATLAB混合编程的实现方法
Matlab混合编程4
电脑版