`
dawuafang
  • 浏览: 1092220 次
文章分类
社区版块
存档分类
最新评论

VC6.0调用Matlab Dll的方法

 
阅读更多
原文地址:VC调用Matlab编写的DLL作者:小木头
一. 基本环境:
1. Microsoft Visual Studio 2008 SP1(VC++);
2. MATLAB Compiler Runtime;
3. OS:Windows XP。
二. 基本方法:
1.经验说明
<wbr><wbr><wbr><wbr><wbr><wbr> 首先值得说明的是,经过不断的尝试和搜集资料,发现要想在VC++中调用MATLAB编写的DLL,必须至少要有MATLAB Compiler Runtime环境,也就是说得先安装MCRInstaller.exe(约160M),当然,直接安装MATLAB R2009a(约4.0G)也可以。显然,如果您仅仅想用VC++调用MATLAB编写的DLL,安装MCRInstaller.exe 就足够了,安装完之后看一下系统环境变量的Path里是否已经添加了其路径,如果没有需手动添加,一般会有的。<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> 此外,值得注意的是,我遇到了这样的情况:起初我只是安装了MCRInstaller.exe,此时VC++可以正常调用MATLAB编写的DLL,之后,我又想装下MATLAB R2009a,安装完之后奇怪的事情出现了,之前正常的调用,居然不行了,在调用libdrawAMResultsInitiali<wbr>ze()【其中:libdrawAMResults是DLL的名称】初始化lib时,返回值永远是false,无法正常调用了。又经过不断的尝试和搜集资料发现,应该是安装MATLAB R2009a的时候和之安装的MCRInstaller.exe 发生了“共享冲突”,之后,我将 MATLAB R2009a卸载了,卸载后一定用系统清理工具清理一下系统,可能是还有残存的注册表信息还是文件,会导致还是无法正常调用MATLAB编写的DLL,清理之后,奇迹再次发生了,又可以正常调用了。<br> 2.调用细节步骤:<br> (1)将MATLAB生成的:*.h、*.lib、*.dll 三个文件拷贝到当前项目的目录下。<br> (2)设置VC++项目的属性:<br> 首先,在“配置属性-&gt;C/C++-&gt;常规”的“附加包含目录”中添加MCR的include目录的路径,我的路径是:<br> C:Program FilesMATLABMATLAB Compiler Runtimev713externinclude<wbr> 。如下图所示:<br><a target="_blank" href="http://photo.blog.sina.com.cn/showpic.html#blogid=5f8b75f60100xb5f&amp;url=http://s16.sinaimg.cn/orignal/7c9517cega0625da7d2ef"><img title="[转载]VC调用Matlab编写的DLL" name="image_operate_6031302246215722" alt="[转载]VC调用Matlab编写的DLL" src="http://s16.sinaimg.cn/bmiddle/7c9517cega0625da7d2ef&amp;690"></a><br><br> 其次,在“配置属性-&gt;链接器-&gt;常规”的“附加库目录”中添加MCR的lib库路径,我的路径是:<br> C:Program FilesMATLABMATLAB Compiler Runtimev713externlibwin3<wbr>2microsoft 。如下图所示:<br><a target="_blank" href="http://photo.blog.sina.com.cn/showpic.html#blogid=5f8b75f60100xb5f&amp;url=http://s2.sinaimg.cn/orignal/7c9517cega0627cecbdf1"><img title="[转载]VC调用Matlab编写的DLL" name="image_operate_67631302246215877" alt="[转载]VC调用Matlab编写的DLL" src="http://s2.sinaimg.cn/bmiddle/7c9517cega0627cecbdf1&amp;690"></a><br><br> 最后,在“配置属性-&gt;链接器-&gt;输入”的“附加依赖项”中添加DLL中和程序中所依赖的lib库名称【被调用的MATLAB DLL的lib也可以包含在这里,当然也可以直接通过“添加-&gt;现有项“到项目资源文件中】。如下图所示:<br><a target="_blank" href="http://photo.blog.sina.com.cn/showpic.html#blogid=5f8b75f60100xb5f&amp;url=http://s16.sinaimg.cn/orignal/7c9517cega0629a8b56ff"><img title="[转载]VC调用Matlab编写的DLL" name="image_operate_25191302246216408" alt="[转载]VC调用Matlab编写的DLL" src="http://s16.sinaimg.cn/bmiddle/7c9517cega0629a8b56ff&amp;690"></a><br><br><a target="_blank" href="http://photo.blog.sina.com.cn/showpic.html#blogid=5f8b75f60100xb5f&amp;url=http://s14.sinaimg.cn/orignal/7c9517cega062c1bc9bcd"><img title="[转载]VC调用Matlab编写的DLL" name="image_operate_83331302246217857" alt="[转载]VC调用Matlab编写的DLL" src="http://s14.sinaimg.cn/middle/7c9517cega062c1bc9bcd&amp;690"></a><br><br> (3)VC++程序中的调用:<br> 首先,包含所使用到的头文件,例如(我的libdrawAMResults DLL):<br> #include "libdrawAMResults.h"<br> #include "mclmcrrt.h"<br> #include "mclcppclass.h"<br> 其次,正式调用:<br><wbr><wbr><wbr> //初始化MCR<br><wbr><wbr><wbr> if(!mclInitializeApplication<wbr>(NULL,0) )<br><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr> MessageBox(_T("Could not initialize MCR!"));<br><wbr><wbr><wbr> }<br><wbr><wbr> //初始化lib<br><wbr><wbr><wbr> if(!libdrawAMResultsInitiali<wbr>ze())<br><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr> MessageBox(_T("Could not initialize libdrawAMResults!"));<br><wbr><wbr><wbr> }<br><wbr><wbr><wbr> try<br><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr> mwArray a(3,3,mxDOUBLE_CLASS);<br><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr> //double ha[9]={0,0.953,-0.544,1.189,0.177,-0.358,0.358,1.811,-0.358};<br><wbr><wbr><wbr><wbr><wbr><wbr> //a.SetData(ha,9);<br><br><wbr><wbr><wbr><wbr><wbr><wbr> a(1,1) = 0;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> a(1,2) = 1.189;<wbr><wbr><wbr><wbr><wbr> a(1,3) = 0.358;<br><wbr><wbr><wbr><wbr><wbr><wbr> a(2,1) = 0.953;<wbr><wbr><wbr><wbr><wbr> a(2,2)=0.177;<wbr><wbr><wbr><wbr><wbr> a(2,3) = 1.811;<br><wbr><wbr><wbr><wbr><wbr><wbr> a(3,1) = -0.544;<wbr><wbr><wbr><wbr> a(3,2)=-0.358;<wbr><wbr><wbr><wbr><wbr><wbr> a(3,3) = -0.358;<br><br><wbr><wbr><wbr><wbr><wbr><wbr> //上面两种方式初始化mwArray,得到的矩阵才是一样。<br><wbr><wbr><wbr> }<br><wbr><wbr><wbr> catch (const mwException&amp; e)<br><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr> MessageBox(_T("mwException!"));<br><wbr><wbr><wbr> }<br> 3.致谢<br><wbr><wbr> 感谢网友们发布的相关方面的经验分享给我的参考、指引和启发。谢谢!<br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
分享到:
评论

相关推荐

    VC6.0与MATLAB6.5混合编程

    在MATLAB6.5下将m文件编译成DLL的形式,然后在VC6.0中通过此DLL调用在m文件里写的函数。从而实现VC与MATLAB的混编。

    VC6.0和Matlab7.0混合编程(Dll)

    通过VC调用Matlab生成的dll文件实现混合编程

    VC6.0和Matlab7.0混合编程实例

    内含基于MFC和Win32控制台的Dll调用方法,以及com形式的混合编程

    VC6环境下编译的MATLAB小波包变换c++库_matlab_vc6.0_vc调用matlab_动态编译_小波包变换

    本文给出了matlab小波工具箱里的小波包变换的m函数封装,并通过vc6的编译器进行编译输出,给出了编译后后供vc6调用的四个输出文件,包括ctf文件、dll文件、.h文件以及lib文件

    MAtlab7.1与VC++6.0 混合编程,MATLAB中dll制作-VC6中调用,非常好

    MAtlab7.1与VC++6.0 混合编程,MATLAB中dll制作-VC6中调用,非常好MAtlab7.1与VC++6.0 混合编程,MATLAB中dll制作-VC6中调用,非常好MAtlab7.1与VC++6.0 混合编程,MATLAB中dll制作-VC6中调用,非常好MAtlab7.1与...

    VC++调用Matlab生成的DLL 实例

    将Matlab中现成的数学函数编译为动态链接库,供VC调用,可以省去工程应用中要编写各种C++数学算法的...这个文档是我总结的几个案例,分别是VC6.0和VS2008下调用Matlab r2010a生成的dll的例子,包括矩阵求逆和数值积分。

    VC++6.0动态链接库

    可以在VC中调用Matlab的库函数进行编程并显示,得到EXE 文件。Matlab7中只剩下了最基本的结构定义,效率低下,使用不便。 以这种方式得到的程序在运行时需要相应的Matlab dll 支持。示例中的EXE 目录已经附上所有...

    c++调用matlab例子

    c++调用matlab例子,在WindowsXP(SP2), MATLAB R2007b, VC6.0下实现。 具体的步骤是: 1). 设置系统环境变量path,path里面要包括MATLAB的exe, dll那个路径 %MATLAB_PATH%\bin\win32 只要MATLAB是正确安装,它应该...

    matlab VC 混合编程 DLL模式 实例工程代码

    matlab 与VC 混合编程的DLL模式,在matlab7.0以上版本中使用deploytool发布C/C++版本的.dll,.lib,.h文件,在VC中使用DLL方式进行调用,资源为VC6.0工程下的实例

    VC与Labview、Matlab编程论文资料[2].rar

    VC调用MATLAB的方法.pdf Vega和MFC的战斗机飞行仿真系统设计与实现.pdf _NET环境下MFC框架应用的包装集成技术研究.pdf 一种基于VC的串口通讯新方法.pdf 一种改进的LabVIEW串口通信系统的实现.pdf 一种采用VC_...

    VC与Labview、Matlab编程论文资料

    VC调用MATLAB的方法.pdf Vega和MFC的战斗机飞行仿真系统设计与实现.pdf _NET环境下MFC框架应用的包装集成技术研究.pdf 一种基于VC的串口通讯新方法.pdf 一种改进的LabVIEW串口通信系统的实现.pdf 一种采用VC_...

    VC与Labview、Matlab编程论文资料[4].rar

    VC调用MATLAB的方法.pdf Vega和MFC的战斗机飞行仿真系统设计与实现.pdf _NET环境下MFC框架应用的包装集成技术研究.pdf 一种基于VC的串口通讯新方法.pdf 一种改进的LabVIEW串口通信系统的实现.pdf 一种采用VC_...

    若干源程序资料12.rar

    2012-06-11 21:35 50,176 关于c语言和汇编语言相互嵌套调用的学习总结.doc 2012-06-11 21:11 190,993 典型算法包.rar 2012-06-11 21:16 264,555 内存管理和设备调试中文.pdf 2012-06-11 21:30 267,989 冈萨雷斯数字...

Global site tag (gtag.js) - Google Analytics