matlab和vc混合编程综述

matlab和vc混合编程综述

ID:13086380

大小:433.00 KB

页数:21页

时间:2018-07-20

matlab和vc混合编程综述_第1页
matlab和vc混合编程综述_第2页
matlab和vc混合编程综述_第3页
matlab和vc混合编程综述_第4页
matlab和vc混合编程综述_第5页
资源描述:

《matlab和vc混合编程综述》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、程序中使用MATLAB编译产生的DLL(VS2005,MATLAB7.5,mwArray)  2007-12-1614:52:39  分类: MatLab/Maple/Mat字号 订阅from: http://www.simwe.com/forum/thread-801187-1-1.html程序中使用MATLAB编译产生的DLL(VS2005,MATLAB7.5,mwArray)最近有几个帖子都在讨论有关在C++程序中使用MATLAB编译产生的动态链接库DLL。本来想用原来帖子中给出的m代码作为例子,无奈那段代

2、码其实无法执行。为了避免分散注意力,也为了更好地讨论问题,于是决定还是另外新开一个主题,以简单的例子,和大家一起讨论如何在C++程序中使用matlab编译产生的DLL。同时MATLAB最新版本R2007b刚刚发布不久,其中包含编译器4.7版,有了一些新的特性,于是也借这个例子来验证一下相关的技术有没有发生大的变化。最近讨论的问题是关于在C++程序中调用MATLAB编译产生的动态链接库。具体的问题是在调用DLL中函数时传递参数。我们知道,MATLAB可以把m代码编译成两种DLL,分别是C语言接口和C++语言接口的D

3、LL。论坛上的问题是关于调用C++接口的DLL中的函数,所以这里我们就以这种DLL为例来介绍。在C++接口的DLL中,函数的输入、输出参数都是mwArray对象。所以问题归结为如何在C++程序中使用mwArray。这个问题本来可以只用一个简单的C++程序来练习,而不需要MATLAB编译的DLL。不过为了模拟实际情况,选择以一个更为接近实际的m代码作为例子。在这个例子中,输入输出都是矩阵,至于标量,它也是一个一行、一列的矩阵。实验环境:Windows2003StdServerwithSP2(En),MATLABR2

4、007b,VisualStudio2005。MATLAB安装路径:h:MATLABR2007b。实验内容:把一个简单的m代码编译成C++接口的DLL,然后在C++程序中调用。为了简单起见,这里的C++程序是一个Win32Console程序,而不是Windows图形界面的程序,不过不妨碍我们的讨论。下面是这个例子用到的m代码。它定义了一个名为myadd2的函数:[Copytoclipboard] [-]CODE:function[y,z]=myadd2(a,b)%dummyfunction,justtodemons

5、tratetheideay=a+b;z=a+2b;end首先把这个函数编译成C++接口的DLL。为此,我们需要先设置MATLAB编译器。具体做法是在MATLAB命令行执行“mbuild-setup”。然后用下面这行命令把myadd2函数编译成一个C++接口的DLL:[Copytoclipboard] [-]CODE:mcc-Wcpplib:libmyadd2-Tlink:libmyadd2结果,我们将会得到包含libmyadd2.dll,libmyadd2.ctf,libmyadd2.h,libmyadd2.li

6、b等在内的一些文件。接下来我们只需要这四个文件。请注意:在MATLABR2007b之前,这些文件都会在和编译的m代码所在的目录中,而在MATLABR2007b,缺省情况下这些文件会在DocumentsandSettings中用户的MyDocuments目录中。此时,打开libmyadd2.h看看,在文件的最下面我们可以发现C++接口的函数定义。仔细观察过后,我们可以发现,这个接口函数的参数是按照这样的顺序定义的:输出参数的个数、输出参数、以及输入参数。然后在VS2005中创建一个Win32Console的VC++

7、工程,我在测试时取名为testmyadd2_r2007b。把以上四个文件拷贝到VC++工程的源代码所在目录。接下来设置VC++,让它能找到MATLAB接口函数的定义及连接库函数。可以有两种设置方式:一种是改VS2005中关于VC++的设置,这样的好处是每个新的工程都能自动获得这个设定;而另一种是只改当前工程的设置,也就是设置只对该工程有效。这里用后一种方式。在VS2005中打开工程testmyadd2_r2007b,选择菜单“Project-->Properties,在出来的对话框上,把MATLAB提供的incl

8、ude路径加到VC++的头文件搜索路径。如图所示:然后把相应的lib所在目录加到linker的额外搜索路径上。如图所示:  接下来,告诉VC++,我们的这个程序需要连接到另外两个额外的库函数:libmyadd2.lib和mclmcrrt.lib。中间用空格隔开。如图所示:最后则是程序代码。这个程序只有一个main函数,其完整代码附在下面给大家参考。欢迎大家拍砖。谢谢!CO

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。