VC和matlab混合开发学习
作者:朱金灿
来源:http://blog.csdn.net/clever101
第一种方式是直接调用Matlab Engine的接口。Matlab Engine 采用Client/Server的方式,通过ActivcX通道和Matlab接口来实现在VC编程环境中直接调用matlab中的指令。调用使用的函数是:engEvalSting。这种方式具体见这篇文章:
一步步学如何使用VC调用matlab engine编程,相关源码下载见:VC调用matlab示例。这种方式优点是方便,缺点是必须启动Matlab,就是说用户机子上必须装有matlab。
第二种方式是使用Matcom工具。Matcom是mathTools公司推出的一个能将M文件转化成相同功能C++代码的工具。相比Matlab自带的编译器Compiler,用Matcom转化代码要简单和方便得多。但是matcom在很多方面也有限制,比如,对struct等类的支持有缺陷,部分绘图语句无法实现或得不到准确图象,尤其是三维图象。Matcom和VC6.0结合得比较好,和其它的VS平台结合得并不好,如果没有什么特殊原因,建议最好别用matcom了。因为它已经不再升级更新了,社会认知度越来也低,而我在VS2008的使用过程中也发现有不兼容的地方,如离散傅里叶变换fft,fft2是无法使用的,提示内存错误(VC6.0可用)。而且这个软件的核心是Matcom C++库,它是以动它链接库.dll给出的,你无法得知它的实现原理,对编程能力的提升没多大帮助。
在《精通VC与Matlab联合编程(五)》一文中作者提到了VC程序可以直接调用Matlab的C/C++数学函数库。我看了下它的例子,发现我安装的Matlab 7.8.0(R2009a)已经没有这样的例子。从网上找到一篇文章《综述MATLAB与VC的交互编程》介绍了一种方法:matlab可以将全部或部分变量保存为mat文件,matlab提供了C接口来读取mat文件。但这种方法依然不能脱离Matlab环境独立运行。
继续搜索网络,发现要脱离Matlab环境独立运行,还是利用Matlab的两个工具Matlab Compiler(也就是通常所用的mcc命令)和combuilde工具。
Matlab Compiler的作用是将m文件转化成C/C++代码(也就是通常所用的mcc命令),这种源代码需要用C/C++编译器编译连接成独立应用程序,在将m文件转成独立应用程序的过程中生成的C/C++文件,原则上是可以被其它的C/C++代码调用的,编译器可以通过设置mcc命令的选项,将m文件编译成动态链接库文件、C/C++文件、可执行文件等一系列文件。到matlab R21.1为止,Matlab Compiler的m程序转换成C/C++代码功能有很多限制:
不能转换脚本m文件,只能转换m函数;
不能使用matlab对象;
不能用input或者eval操作matlab空间变量;
不能动态地命名变量,然后用load或者save命令来操作;
不能处理具有嵌套调用其他m文件的m文件;
不能使用MATLAB内联函数;
combuilder就是把用matlab编写的程序做成com组件,供其他语言调用。该方法实现简单,通用性强,而且几乎可以使用Matlab的任何函数(注意:不支持脚本文件,脚本文件使用时要改为函数文件),因此在程序较大、调用工具箱函数或调用函数较多时推荐使用,这也是Matlab公司(Matlab公司就是Mathworks公司)推荐的使用方法。