VC++与 Matlab 混合编程的快速实现
刘建伟
吉林大学朝阳校区电子科学与工程学院电子信息工程系(长春 130026)
摘 要:许多工程软件需要用到复杂的数学算法。VC++能够形成各种用户界面,并可以直
接与系统及底层硬件交换数据。因此研究 VC++和 Matlab 的混合编程具有很大的实际意义。
该文讨论了如何使用 Matlab 的 Complier 将 *.m 函数编译为动态链接库 DLL,提供给 VC++
调 用的方法,提供了一种 VC++与 Matlab 混合编程的快速实现。
关键词:Matlab VC++ MCC Complier 动态链接库 DLL
Matlab 作 为 当今世界上应用最为广泛的数学软件,具有非常强大的数值计算、数据分
析处理、系统分析、图形显示甚至符号运算的功能。已经在如生物工程,图像处理,语音处
理,雷达探空,声纳探水,地震探地,以及控制论,系统论等各个领域得到广泛的应用。它
是一个完整的数学平台,在这个平台上,用户只需寥寥数语就可以完成十分复杂的功能,大
大提高了工程分析计算、图像处理的效率。但是 Matlab 强 大的功能只能在它所提供的平台
上才能使用,即用户必须在安装 Matlab 系统的机器上才能执行*.m 文件。这样当用户需要
将在 Matlab 下已开发完毕的复杂算法应用到高级语言开发环境下时就带来了问题,是将现
成的东西集成高级语言开发的程序中呢?还是用高级语言再重新实现一遍?显然大家所期
望的是减少工作量,最好能将 Matlab 下开发好的程序或函数直接应用到高级语言开发的程
序中,这就是 Matlab 与 高级语言的混合编程问题。
VC++是当前 Windows 下 的 主 要编程语言之一,它能方便地形成应用软件中所需要的
各种用户界面和工具并直接与系统及底层硬件交换数据。用 VC++开发的系统具有容易维护
升级、界面友好、代码效率高、执行速度快等一系列优点,因此已成为目前应用软件开发中
广泛采用的主要工具之一
因此,如何将 Matlab 与 VC++进 行 有 效 的混合编程广受工程科研人员的关注。解决这
个问题,不仅能更好地发挥 Matlab 强 大的功能,还能快速地进行软件开发,尤其是当软件
开发中需要实现复杂的数学算法、图 形 处理时尤为迫切。研究 VC++与 Matlab 的混合编程
具有很大的实际意义。
MATLAB 与 Visual C++结 合的方法有多种,但其实用程度与范围不同。常用的方法有:
(1)将 Matlab 程 序 编译成 C/C++源 文件并嵌入 VC++;( 2) 在 C/ C++程 序中利用 Matlab
engine 调 用 Matlab 函数;(3)在 C/C++程 序中直接使用 Matlab C/C++ Math Library; (4)将 .m
文件编译成*.dll 文件嵌入到 VC++的程序中。基于实用性、易用性的考虑,本文主要讨论第
四种方法。另外随着 Matlab 版本的升级,原来的 math library 已经并入了 Compiler 之中,是
否是 mathworks 比较推崇 DLL 的 方 式呢?本文通过一个简单的例子来说明 Matlab 和 VC++
混编的具体过程(环境为 Matlab6.5&VC++6.0)。
1 Matlab 编译环境的设置
为了能够使用 Matlab 的 Complier 将 *.m函数文件编译为动态链接库 DLL,必须对 Matlab
的 环境做出相应的配置。具体做法如下:
在 Matlab 的 Command Window 下 输 入 命令 mbuild – setup,并 根 据 Matlab 的提示选择合
适的编译器,笔者使用的是 Microsoft Visual C++.过 程如下
>> mbuild -setup
Please choose your compiler for building standalone MATLAB applications: