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