收稿日期:2003-03-20。刘廷瑞,硕士生,主研领域:光学测量技术。
基于Matcom415的VC ++与Matlab 通用接口程序编制
刘廷瑞 于瀛洁 陈明仪
(上海大学精密机械系 上海200072)
摘 要 本文着重探讨基于Matcom4.5的VC ++与Matlab 接口程序的实现问题,该问题虽然已有一些相关文献资料,但都必须插
入不同的相关连接代码。本文实现了统一的规范,使VC ++与Matlab 接口程序的编制成为一种机械的通用程序,不需要嵌入另外的代码,即使不懂VC ++也能实现程序的编制。关键词 Matlab VC ++610 Matcom4.5
GENERAL INTERFACE DEVICE BETWEEN VC ++AN D MAT LAB BASE D ON MATCOM4.5
Liu T ingrui Y u Y ingjie Chen Mingyi
(Department o f Precision Mechanics ,Shanghai University ,Shanghai 200072)
Abstract The paper emphasizes the realization of the interface program between Matlab andVC ++6.0based on Matcom4.5,although the issue has already been discussed in past literature ,it must be inserted correlation codes respectively.The paper realizes uniform standardization ,making in 2terface program be a general format ,it doesn πt need additional codes for even ignorance of VC ++1K eyw ords Matlab VC ++6.0 Matchom4.5
1 前 言
VC ++610与Matlab 接口程序的实现有多种方法。可以利
用Matlab 引擎,Matlab 引擎采用客户和服务器计算方式,在运用中,VC 的C ++语言的程序作为前端客户机,它向Matlab 引擎传递命令和数据信息,并从Matlab 引擎接收数据信息;它通过函数:engOpen ,engG etArray ,engPutArray ,engEvaS tring ,engOutputBu ffer ,
engClose 与客户机进行交互,但识别和掌握这一交互过程也是一
个复杂的过程;还可以利用Matlab 自身的编译器调用工具箱中的函数,Matlab 的编译器可将Matlab 的M 文件转换为C ++的源代码,以产生完全脱离Matlab 运行环境的独立的运用程序,过程实现为“mex -setup ,mbuild -setup ,mcc -t -h -L CPP 文件名”格式,但编译器如用来建立独立的运用程序,不能调用Matlab 工具箱中的函数,且连接C ++代码的过程也是一个复杂的过程;本文采用对Matcom4.5编译成的C ++代码规范化,不需要有特别的技术,实现了接口程序的“傻瓜”程式。
2 利用Matcom4.5编译接口程序的步骤
211预备工作
在Matcom4.5的安装过程中若出现“某一路径下缺少
XXX 1m 文件”的提示,则应手工建立该路径及空白的XXX 1m 文
件,然后重新运行安装程序。另外将需要转化的matlab 文件准备就绪,本文为LFFT 1m 、surfit.m ,其中surfit.m 为子程序,可以有多个子程序,一定要使LFFT 1m 预先在matlab 下运行通过,同时一定要使LFFT 1m 文件内容的第一行为function LFFT ()。
212运行Matcom4.5后打开LFFT 1m
点击file ->compile to dll ,在右下角的窗口内察看有无错误发生,如有则修改相应的matlab 程序重新执行,如没有错误则完成CPP 转化,转化成的代码在Matcom \Debug 内。如果想马上验证转化后代码的执行情况,则继续点击file ->compile to exe ,
结果产生LFFT.exe 文件,可直接运行进行验证。
213将CPP 代码插入VC ++框架
1)打开Matcom \lib 文件夹,拷贝matlib.h 、v4501v.lib 两个
文件到Matcom \debug 目录。
2)打开系统文件搜索向导,查找ag o4501.dll 和v4501v.dll 两个文件,并将其拷贝到Matcom \debug 目录。
3)打开VC ++610,建立文档界面,新建“FFT ”菜单,并映射菜单打开函数onFFT (),使该函数位于“view ”类,并拷贝Matcom \debug 下的所有内容到工程目录。
4)在VC 工程文件中,加入工程目录下所有待插入的“1h ”头文件及v4501.lib 库文件。
5)在view 类CPP 文件中包含所有加入工程的头文件的文
件名,并包含“#pragma hdrstop ”
(可从工程下的LFFT 1CPP 内复制),并在view 类内初始化init =false 。
6)在view 类的头文件下加入:
∥Im plementation ……
protected ;bool init ;
7)在onFFT ()函数的执行处加入固定格式:
if (!init ){begin
scope
initM (M ATCOM VERSION );
LFFT ();∥此处为可变处,随所要操作的matlab 文件变化;exitM ();init =true ;end
scope}init =false ;
8)在view 类的CPP 文件的末尾处(必须是末尾处,否则可第21卷第11期 计算机应用与软件
Vol 121,No 111
2004年11月 C om puter Applications and S oftware Nov 12004