肠鸣吃什么药最好:vc和matlab的混合编程 - Silence的日志 - 网易博客

来源:百度文库 编辑:九乡新闻网 时间:2024/05/01 02:04:53

vc和matlab的混合编程

技术 2008-10-29 23:14:29 阅读60 评论0   字号: 订阅

matlab真的是一个好东西,它的介绍我就不说啦,自己google去,matlab在数学处理、数字图像方面的研究有很好的应用,只是他在与其他例如vc,vb,java的接合上显得比较的困难,似乎大家都在探讨这方面的问题,经过这些天的猛看猛试验,最终在matlab的COM接合上实现突破,并且正如matlab推荐的那样,真的非常的方便和通用,几乎可以处理所有的函数,包括图形图像的处理函数。

一般来说,vc调用matlab混合编程有以下几个途径:

一、通过Matlab Engine方式

  Matlab Engine是指一组Matlab提供的接口函数,支持C语言, Matlab Engine采用C/S(客户机/服务器)模式,Matlab作为后台服务器,而C程序作为前台客户机,通过Windows的动态控件与服务器通信,向Matlab Engine传递命令和数据信息,从Matlab Engine接受数据信息。用户可以在前台应用程序中调用这些接口函数,实现对Matlab Engine的控制。采用这种方法几乎能利用Matlab全部功能,但是需要在机器上安装Matlab软件,而且执行效率低,因此在实际应用中不采用这种方法,在软件开发中也不可行,我认为适合个人使用或做演示用,因此不打算介绍。

二、直接调用Matlab的C/C++数学函数库

  Matlab中提供了可以供C/C++语言调用的C/C++数学函数库,其中包含了大量用C\C++语言重新编写的Matlab数学函数,这些函数涉及到线形代数、数值分析、傅立叶变换、多项式计算、解微分方程等,并且函数库中提供了大量各种矩阵操作函数,在VC中可以直接使用这些函数,通过这些函数可以在VC中方便的实现在Matlab中矩阵运算功能。可以看出用这种方法可以很灵活的调用Matlab来编写应用程序,但要求读者对C\C++语言比较熟悉,可以看出使用这种方法调用Matlab的工具箱函数有很大困难。适合对C\C++语言比较熟悉的用户使用,

三、用Matlab自带的Matlab Compiler

  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++代码功能有很多限制:

  1. 不能转换脚本m文件,只能转换m函数;
  2. 不能使用matlab对象;
  3. 不能用input或者eval操作matlab空间变量;
  4. 不能动态地命名变量,然后用load或者save命令来操作;
  5. 不能处理具有嵌套调用其他m文件的m文件;
  6. 不能使用MATLAB内联函数;

 

四、使用matlab的combuilde工具

   COM是component object module的简称,它是一种通用的对象接口,任何语言只要按照这种接口标准,就可以实现调用它。matlab6.5新推出来的combuilder就是把用matlab编写的程序做成com组件,供其他语言调用。该方法实现简单,通用性强,而且几乎可以使用Matlab的任何函数(注意:不支持脚本文件,脚本文件使用时要改为函数文件),因此在程序较大、调用工具箱函数或调用函数较多时推荐使用,这也是Matlab公司(Matlab公司就是Mathworks公司)推荐的使用方法。

五、使用matcom工具。

  这是个第三方控件,很小(8M多),原本属于mathtool公司,后来被Mathworks公司合并了,使用该工具可以将m脚本文件和m函数转化成相同功能的C\C++文件,相比其它方法使用matcom具有如下优点:

  1. 转换过程简单(由matcom工具自动实现),容易实现;
  2. 可以方便的生成动态链接库文件(dll)和可执行文件(exe);
  3. 不仅可以转换独立的脚本文件,也可以转换嵌套脚本文件;
  4. 设置环境后,可以使用Matlab的工具箱函数;

 

但matcom也有以下不足:

  1. 对struct等类的支持有缺陷,对class数据类型;
  2. 部分绘图语句无法实现或得不到准确图象,尤其是三维图象;

 

因此在不涉及到三维做图以及m文件不大的情况下推荐使用。

以上方法,我试用了matcom方式、matlab combuilder方式,因为我的vc程序要脱离matlab执行,所以就没有考虑前几种方式。首先对于matcom方式,可能是因为被matlab收购了,最高版本是4.5,支持的api也不多,我试验了好多次都因为编译中出现莫名其妙的错误,没有达到我想要的效果,最终放弃了。后来看到vckbase 上邓科写的有关matlab和vc混合编程的一系列文章,最终选择了combuilder,具体方法也可以看邓科的这一篇浅析VC与Matlab联合编程<三>,对于combuilder模式编程有非常直观的讲解,具体可以看这一篇,我在这里只是说一下要注意的地方。

1,要被添加进入com的m函数中调用的其他m也需要加入到m文件的目录里面或者是matlab combuilder可以寻找目录

2,combuilder编译的信息千万不能放过,似乎有一个warning都可能是有问题的,我就是这样,完美结果是编译log没有warning和error。

3,在将m文件加入到com中前最好先在matlab中执行测试一遍

vc和matlab的混合编程 - Silence的日志 - 网易博客 浅析VC与matlab接口编程(一) - Kris Lee的日志 - 网易博客 Matlab与SQL Server数据库编程指南 - 《MATLAB和数据库混合编程案例分析》 MATLAB技术论坛 精通 VC 与 MATLAB 联合编程<九>用户输入数据,完成数据的拟合(转载) 富含VC 胡萝卜素 钾的蔬菜和水果 - 榴榴的日志 - 网易博客 引用 多个FLASH混合! - 成的日志 - 网易博客 VC++和Matlab VC操作Excel - hope多多的日志 - 网易博客 ARM Bootloader的实现 ---C和ASM混合编程 Symbian http 编程总结 - Simon的日志 - 网易博客 公式编程教材 - tayang的日志 - 网易博客 Matlab生成,vb、等的调用! - flider的日志 - 网易博客 BP神经网络的设计实例(MATLAB编程) 浅析VC与matlab接口编程(一) - VC知识库文章 VC++和Matlab(转) 超雷!自然界惊人的混合动物 - wlpzpp715的日志 - 网易博客 如何将MATLAB程序编译产生DLL - Matlab 混合编程 MATLAB技术论坛 详解用VC实现bmp位图的打开 - fengqing888的日志 - 网易博客4563 用VC实现自删除程序 - 爱上未来的你的日志 - 网易博客 VC经典的编译错误解决办法(转载) - jacky的日志 - 网易博客 浅析VC与matlab接口编程(一)(转载) VS2008在VC/MFC中为程序定义全局快捷键 - 弘毅的日志 - 网易博客 引用 多个FLASH混合博客音画常用代码集锦!2 - 乘成的日志 - 网易博客 在VC/MFC编程中将单文档程序改成多文档方法(原创)_闲云野鹤的博客 —— 纪念大二和大...