国民党是好是坏:[转载]在Visual C 中调用Matlab的其他方法

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 06:50:36
在Visual C++中调用Matlab的其他方法1. 利用Matlab引擎
Matlab引擎(Matlab engine)提供了一组 Matlab API 函数,用户不必关心这个Matlab引擎是如何实现的,只需要调用这些函数即可。正是通过这些 API 函数,实现了应用程序进程之间的传递数据,从而达到两者之间的良好结合。Matlab引擎应用程序的实质是把Matlab作为一个引擎,允许从自己的Visual C++程序调用这个引擎。在运行时,引擎作为一个进程单独运行,此时Visual C++程序也作为一个进程单独运行,两者可以通过进程间的通信机制进行交互。Matlab引擎采用客户和服务器计算模式。在运行中,Visual C++的C语言或C++语言的程序作为前端客户机,它向Matlab引擎传递命令和数据信息,并从Matlab引擎接收数据信息,Matlab引擎提供了下列几个函数:engOpen:启动Matlab引擎engClose:关闭Matlab引擎engGetArray:从Matlab引擎中获得一个Matlab矩阵,用于数据交换engPutArray:从应用程序向Matlab引擎发送一个Matlab矩阵,用于数据交换engEvalString:执行一个Matlab命令engOutputBuffer:创建一个用于存储Matlab文本输出的字符缓冲区
库文件的制作:程序在Visual C++下编译,还需要用到相应的导入库libeng.lib,libmx.lib,libmat.lib和matlab.lib这几个动态链接库。在Matlab的安装目录Matlab\extern\include下,有以下几个定义文件:libeng.def,libmx.def,libmat.def,matlab.def。以libeng.def为例,用如下的命令生成导入库:C:\MATLABR11\extern\include>lib/def:libeng.def /out:libeng.lib /machine:ix86其中C:\MATLABR11为本地机器的Matlab安装目录,/out:libeng.lib指定的是输出文件,/machine:ix86是指所用的机器环境,这里的ix86是指支持Intel的处理器。同样,生成libmx.lib,libmat.lib以及matlab.lib这几个相应的库文件。
库文件的加入:把所生成的库文件加入到VC工程的Project->Settings->link->Object/Library Modules文本框中即可。
2. 利用Matlab自身的编译器调用工具箱中的函数
Matlab的编译器可将Matlab的M文件转换为C或C++的源代码,以便产生完全脱离Matlab运行环境的独立的运用程序,但Matlab本身的资料说明编译器如用来建立独立的运用程序,就不能调用Matlab工具箱中的函数,这非常不利于实现一些特殊的算法。然而工具箱中的函数既然是M文件,那么就一定可以用编译器来编译,以提供如Visual C++的调用函数,但是编译器只能编译一个独立的M文件,也就是说这个 M文件必须不依赖于其他的M文件。如果这个M文件中又调用了其他的M文件,那么可以将被调用的M文件拷贝到调用M文件的相应位置,并做适当的改动,这样就可以用编译器来编译。需要注意的是,编译器不支持图形函数,所以M文件中如果有图形函数,则需要将其注释掉。
3. 利用Matcom实现Visual C++和Matlab的结合
Matcom4.5是由MathTools公司推出的一个功能强大的软件(可在www.mathtools.com处获得,也可以在国内一些数学专业网站得到),它可以将Matlab的.M文件转换成具有相同功能的C++代码,这样既能够保持Matlab的优良算法,同时也利用了C++的高效率。也就是说,我们可以在Visual C++编译环境下创建友好的用户界面,而把一些较为底层的工作,如数据处理、仿真等交给Matlab来完成。用Matcom来编译Matlab的.M文件的具体过程是这样的:先把M文件按照与Matcom的cpp库的对应关系翻译为cpp源代码,然后用对应版本的C编译器将.cpp文件编译成相应的.dll或.exe文件。因此在第一次运行时,要指定所用的C编译器的路径,否则将无法编译。指定好的编译信息会写在Matcom\bin\matcom.ini文件中。在安装Matcom时,它会自动寻找编译器并将其信息写入matcom.ini文件。此外,由于Matcom4.5版本采用了TeeChart3.0 OCX控件,因此它能够支持图形操作。
4. 利用Visual C++进行外部调用
利用Visual C++进行外部调用的基本思路是这样的:首先把,M文件加入到一段C程序中去,然后通过Matlab中的mex批处理文件将该C文件生成.exe文件,再通过Visual C++的外部调用的函数ShellExecute()或WinExec()实现外部调用。me?x批处理文件的调用格式如下:mex –f msvc60engmatopts.bat *.c利用Visual C++的ShellExecute()函数调用的方法如下:ShellExecute()函数是在应用程序中运行其他函数的,该函数既可以运行可执行文件,也可以使用相应的可执行文件打开数据文件。它的函数原形是这样的:HINSTANCE ShellExecute (HWND hwnd, //父句柄窗口LPCTSTR lpVerb, //包含所要执行的操作的字符串LPCTSTR lpFile, //文件名LPCTSTR lpParameters, //包含可执行文件的参数的字符串LPCTSTR lpDirectory, //默认路径INT nShowCmd //所创建进程的显示方法);其中,参数lpVerb可以是“edit”、“find”、“open”、“print”、“explore”或“properties”