预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

四川工业学院学报 JournalofSichuanUniversityofScienceandTechnology 文章编号:100025722(2002)0120013204 基于VC与MATLAB混合编程的研究 111斌2 李自胜,向中凡,朱莹,秦贝 (11四川工业学院机械工程与自动化系,四川成都610039; 21中原油由分公司炼油化工总厂,河南濮阳457165) 摘要:MATLAB是功能强大的工程计算和数据分析软件,VC是面向对象的快速开发工具。二者结 合,可以开发出具有友好界面、满足工程领域应用的软件。本文作者探讨了四种编程的方法,比较了它们的优 缺点,并以实例说明。 关键词:VC;MATLAB;混合编程 中图分类号:TP314;TP31714文献标识码:A 0引言MEX文件可使现有的C/C6源程序无须改写为M 文件格式而在MATLAB中运行,提高了编程效率。 MATLAB是集科学计算、图形图像处理于一体 MATLAB提供了专门的编译MEX文件的工具 的软件系统,具有简洁、强大的数值计算和仿真能力等 MEX,其使用格式为: 优点[3]。近年来,MATLAB已广泛用于工程领域,具 〈〉〈〉可直接编译源程序。 有极好的可读性和可移植性。但存在交互性差、不能MEXoptionsfiles,C6 编译后可在MATLAB命令行方式下键入文件名或函 独立于MATLAB的运行环境等缺点。 数名即可运行。其实现步骤如下: VC是一种面向对象的可视化编程语言,广泛用 (1)在VCIDE中编制C/C6源程序; 于图形与图像、网络与通信以及控制等领域。具有稳 (2)定义入口点函数mexFunction,每个C/C6源程 定和运行速度快的优点,能用于底层直至面向用户的 序必须有这一函数。mexFunction不是一个供用户调 软件的快速开发。但缺乏对大量数据处理与分析、数 用的例程,其原型如下: 据可视化方面的能力。 voidmexFunction(intnlhs,mxArray3plhs[], VC利用MATLAB提供的应用程序编程接口 intnrhs,constmxArray3prhs[]);其中nlhs和nrhs (API)进行编程,二者取长补短,可以开发出具有良好 分别为输出和输入参数个数,plhs和prhs分别为输出 的用户界面、强大的数据处理能力的应用软件。目前 和输入mxArray的地址。mxArray是MATLAB与 有关于这方面的研究报道,但不全面或者使用工具不 C语言进行数据交换的专门的数据类型。 同,如文献[4]就(++Builder与MATLAB混合编程 (3)编译,本例为mexreverse1c。编译后将产生相应 的三种方法进行了研究。由于VL与C++Builder 的动态链接库文件,本例为reverse1dll。 在编译环境配置等诸多方面存在差异,以及In文件在 (4)运行,在MATLAB命令行下键入 混合编程中具有极大的灵活性。文章讨论VC和 x=’MATLAB’;reverse(x) MATLAB混合编程的四种方法。 x= 1混合编程的实现BALTAM 111MEX文件实现∥reverse1c MEX文件作为MATLAB的内建(built-in)函#include“mex1h” 数,是供MATLAB用来调用的C/C6语言程序。voidconvert(char3input-buf,intbuflen,char3 收到日期:2001204224 作者简介:李自胜(19762),男,重庆市铜梁县人,四川工业学院机械工程与自动化系,硕士,主要从事计算机图形学方面的学习和研究。 41四川工业学院学报2002年 output-buf)11211生成lib库文件供VC调用 {∥反转字符串的顺序在〈MATLAB〉\extern\include目录下,包含了 inti;用于开发C6程序的C语言头文件。文件lib31def for(i=0;i<buflen-1;i6)用于VC编译器,-lib31def用于Borland编译器,包 3(output-buf+i)=3(input-buf+bu2好了从不同动态链接库(DLLs)的导出函数。见表1 flen2i22);}所示。 voidmexFunction(intnlhs,mxArray3plhs[],表1〈MATLAB〉\extern\include目录下31def intnrhs,constmxArray3prhs[])Libmat1def包含从MAT文件DLL(libmat1dll)导出的函数 libmat1def名 {char3input-buf,3output-buf; Libmatlb1def包含从MATLAB内建数学库DLL intbuflen,