数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 5125|回复: 2

VC和Matlab调用问题初步研究

[复制链接]
发表于 2003-6-30 08:02:55 | 显示全部楼层 |阅读模式
(摘自小生论文,很多图帖不上来呀,55555555555)


众所周知,Visual C++ 6.0是由Microsoft公司推出的可视化集成开发环境。它把面向对象的程序设计方法与可视化的软件开发环境完美地结合,成为众多程序员的首选。Matlab是功能非常强大的数学软件,它广泛应用于线性代数、自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等领域。然而,Matlab存在不可避免的缺点,一是运算速度较慢,尤其是有多重循环存在的时候更是明显;二是无法脱离Matlab环境运行,可移植性差。因此,如果能够把Matlab的程序加入到自己的Visual C++编制的程序中,将会大大减少编程的工作量、保证程序的准确性,与此同时,能够继承Visual C++良好的用户界面。下面对在Visual C++中调用Matlab程序的几种方法做简要的介绍和比较。
在Matlab与C的接口方面,目前比较常用的方法主要有以下几种:
1.        在C或C++程序中利用Matlab引擎(Matlab Engine)来调用Matlab的函数。
2.        使用Matlab的C++ Compiler(MCC),将M文件编译成CPP源代码,然后在C++编译器中调用。
3.        利用Matlab自带的-mex命令,把Matlab程序编译成MEX文件,然后再用C++来调用。
4.        在C或C++程序中使用Matlab提供的C/C++数学库(C/C++ Math Library)直接调用Matlab函数。
5.        用Mideva把M文件编译成CPP源代码,同时编译成EXE文件或DLL文件,生成的CPP源代码可以被C++编译器调用。
6.        按照Mideva的语法,在Visual C++中直接书写Matlab语句,实现Matlab和C的混合编程。
以上几种混合编程的方法各有利弊。方法1,2,3生成的程序仍然无法脱离Matlab环境,必须在已经安装了Matlab的系统上运行;而方法4,5,6生成的程序则可以独立于Matlab运行。同时,方法1,2,3,4对Matlab中大量的图形句柄函数支持不够,而方法5,6则支持绝大多数的Matlab语句(包括图形)。因此,本文的研究工作主要是采用后两种方法,实现Visual C++和Matlab的混合编程。

3.4.1 Mideva简介
Mideva 4.5是MathTools公司在Matcom技术的基础上开发的一个功能强大的工具软件(可以在www.mathtools.com处下载得到30天的试用版)。MathTools公司开发这款软件的出发点就是为Matlab程序的编辑、调试、编译和优化提供一个完整而强大的集成开发环境。它的功能非常强大,提供了Matlab的近千个基本功能函数。Mideva最吸引人的一点就是可以通过Visual C++把Matlab的源代码编译成动态链接库(DLL)或是可执行文件(EXE),甚至可以直接转化成同等功能的CPP源代码。如果使用了Mideva提供的一些库文件,还可以直接实现和Visual C++的混合编程。这样既能够保持Matlab的优良算法,同时也利用了C++的高效率。也就是说,我们可以在Visual C++编译环境下创建友好的用户界面,而把一些较为底层的工作,如数据处理、仿真等交给Matlab来完成。
下图为Mideva 的界面:



3.4.2 将M文件转化成CPP文件的方法
从以上的讨论可以看出,实现Visual C++和Matlab混合编程的关键就在于把M文件转化成CPP文件,以便在Visual C++里调用。下面就介绍两种把M文件转化成CPP文件的方法。
3.4.2.1 在Mideva环境下将M文件转化成CPP文件的方法
在Mideva环境下将M文件转化成CPP文件的方法比较简便易行。首先,在第一次运行Mideva时,要指定所用的C编译器的路径,否则将无法编译。指定好的编译信息会写在Matcom\bin\matcom.ini文件中。在安装Matcom时,它会自动寻找编译器并将其信息写入matcom.ini文件。
具体转化时,先在Mideva的Configuration菜单中选择编译方式是Debug模式(调试版)还是Release模式(发行版)(如图3-7所示),这两种模式和Visual C++中的编译版本是相对应的。

随后,选择菜单File下的Run,在弹出的对话框中选择需要转换的M文件,Mideva便会自动运行该M文件并将其转换成相应的CPP文件,运行完之后便可以在相应的Debug或是Release目录下找到和M文件同名的CPP文件。

在Visual C++环境下将M文件转化成CPP文件的方法
由于Visual C++环境是我们都比较熟悉的可视化集成开发环境,因此这里重点介绍如何在Visual C++环境下将M文件转化成CPP文件的方法。
要实现这一过程,就必须用到Mideva中带有的Visual Matcom。具体步骤如下。
第一步:在Visual C++中安装Visual Matcom。
启动Visual C++,从主菜单中选择Tools/Customize选项,在弹出的对话框中选择Add-ins and Macro Files标签项,单击Browse…按钮,然后选择“文件类型”为“Add-ins(.dll)”,在C:\Matcom45\bin目录下找到mvcide.dll,单击打开,这样就会出现带有四个按钮的工具条,Visual Matcom便安装完毕。这个过程的示意图如下。


第二步,在Visual C++中使用Visual Matcom将M文件转化成CPP文件。
在Visual C++中新建一个工程,单击Visual Matcom工具条中的.m++(Add m-files to current project)按钮,在弹出的对话框中选择需要转换的M文件,则这个文件就会被加入到我们新建的工程中,同时会生成由该M文件转换得到的相同功能的CPP文件,这样,我们就可以像使用工程中的其他CPP文件一样,使用新的CPP文件中定义的函数。
发表于 2003-6-30 09:15:28 | 显示全部楼层

工具软件中有Matcom的介绍!
发表于 2003-6-30 09:51:16 | 显示全部楼层

恩,不错。
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-4-26 16:54 , Processed in 0.047720 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表