◆ 上海大学通信与信息工程学院 杨高波
Matlab是一个具有强大的矩阵运算、数据处理和图形显示功能的软件,其输出结果可视化,编程效率极高,极少的代码即可实现复杂的运行,然而其边解释边执行,运算效率较低,实现相同功能的代码跟其他编程平台相比运行时间相对较长,且不适合作为通用的编程平台。因此,许多Matlab的应用
程序需要使用诸如VC之类的通用编程平台,实现Matlab与VC的混合编程,这样有助于发挥Matlab和VC的各自优势。
集成的几种实现方法
为了实现混合编程,Matlab 5.0以后版本自带了C语言编译器(Compiler), 可以将M文件转换为C-MEX或C/C++
程序。根据Matlab是否运行,一般将Matlab与VC混合编程分为两大类:Matlab在后台运行和可以脱离Matlab环境运行。
1.Matlab引擎(Engine)采用客户机/服务器(Client/Server)的计算方式,通过Windows的ActivcX通道和Matlab接口。在具体的应用中,VC的
程序作为前端客户机,通过调用Matlab Engine在后台与Matlab服务器建立连接,实现动态通信。这种方法实现较为简单,不要求连接整个Matlab,只需要嵌入必要的Matlab Engine库,可大大地节省系统资源,但这种Matlab在后台运行,运行效率低下。
2.Mideva是Mathtools公司推出的一种Matlab集成编译开发平台,提供对Matlab
程序文件(M文件)的解释执行和开发环境支持。经过简单设置后Mideva可以将M源文件转换为C/C++,然后添加到MSVC、C++ Builder的工程中。
3. 另一种方法是先利用Mideva直接生成EXE文件(方法是启动Mideva,在菜单“File->Compile to exe”中, 选出需要转换的M文件),然后在VC中通过Shell调用,常见的外部函数有shellexec()或winexec()。这种方法简单方便,但运行时出现一个控制台窗口,而且由于VC和Matlab之间不能交互,通用性差,仅适用于VC中调用Matlab实现图形显示的场合。
4. 最新也是最方便的方法是通过Matlab 6.0 Add-in实现Matlab与VC的混合编程。
以上方法1需要Matlab在后台运行,方法2、3、4可以脱离Matlab环境运行。
Matlab Add-in
Matlab 6.0以后版本对其Compiler作了较大的改进,其支持更多的数据类型,更强的优化功能,更为重要的是其Matlab Add-in提供了一个Matlab和VC直接集成的途径。它具有一些新的特征:快速集成M文件到C++工程中,创建独立的 C/C++应用程序或C MEX DLL;通过M文件创建共享库或MEX文件;内含Visual Matrix Viewer,调试过程中可以查看矩阵变量的值; 直接修改M源文件而不是修改生成的C/C++文件;方便快捷地打包应用
程序等。
Matlab Add-in的安装:
1. 启动Matlab,运行“mex-setup”,按照菜单提示选取MSVC。它将配置MEX使用MSVC为默认的编译器(创建C-MEX文件必需),并安装Matlab Add-in所需文件到MSVC目录。
2. 在Matlab环境下运行“mbuild-setup”, 按提示选取MSVC。它将配置使用MSVC为默认的编译器(创建独立应用
程序必需),并安装Matlab Add-in所需的Matlab Compiler和C/C++数学库文件到MSVC目录。
3. 在Matlab环境下运行“cd(prefdir)”和“mccsavepath”。它将保存当前Matlab路径到mccpath文件中,这是因为Matlab Add-in脱离Matlab运行,否则它无从知道Matlab路径。
4. 在MSVC环境中配置Matlab Add-in,方法是:从菜单“Tools -> Customize”选择“Add-ins and Macro Files”选项卡,选中“Matlab Add-in”, 点击“Close”。MSVC工具栏出现Matlab Add-in图标,以后每次启动VC,自动加载Matlab Add-in。
5. 配置Windows系统。在Windows 95/98系统下,找到config.sys, 添加一行:shell= c:\ command.com /e:32768 /p(Windows ME有所不同,需设置Conagent.exe的属性Memory选项卡的Initial Environment值为4096)。从表面看,VC的环境设置也是步骤较多