VC++调用Matlab编写的DLL(混合编程)
来源:互联网 发布:清新简约个人博客源码 编辑:程序博客网 时间:2024/04/29 19:41
有的时候,我们在VC里直接实现一个想法比较复杂或者不够理想,但是使用Matlab可以比较轻松的实现或者实现的效果比较理想,这个时候,我们可以选择混合编程的方法,将预想功能模块使用Matlab实现,在将其编译成供VC调用的DLL,从而更好地实现达到的目标。
一. 基本环境:
1. Microsoft Visual Studio 2008 SP1(VC++);
2. MATLAB Compiler Runtime;(MCRInstaller.exe 可在网上下载安装,已安装了Matlab的就不需安装了)
3. OS:Windows XP。
二. 基本方法:
1.环境准备:
首先值得说明的是,经过不断的尝试和搜集资料,发现要想在VC++中调用MATLAB编写的DLL,必须至少要有MATLAB Compiler Runtime环境,也就是说得先安装MCRInstaller.exe(约160M),当然,直接安装MATLAB R2009a(约4.0G)也可以。显然,如果您仅仅想用VC++调用MATLAB编写的DLL,安装MCRInstaller.exe 就足够了,安装完之后看一下系统环境变量的Path里是否已经添加了其路径,如果没有需手动添加,一般会有的。
2.调用细节步骤:
(1)将MATLAB生成的:*.h、*.lib、*.dll 三个文件拷贝到当前项目的目录下。
(2)设置VC++项目的属性:
首先,在“配置属性->C/C++->常规”的“附加包含目录”中添加MCR的include目录的路径,我的路径是:
C:\Program Files\MATLAB\MATLAB Compiler Runtime\v713\extern\include 。如下图所示:
其次,在“配置属性->链接器->常规”的“附加库目录”中添加MCR的lib库路径,我的路径是:
C:\Program Files\MATLAB\MATLAB Compiler Runtime\v713\extern\lib\win32\ microsoft。如下图所示:
最后,在“配置属性->链接器->输入”的“附加依赖项”中添加DLL中和程序中所依赖的lib库名称。如下图所示:
(3)VC++程序中的调用:(详细的实例可在我的CSDN资源中下载:http://download.csdn.net/detail/margin1988/3677489)
首先,包含所使用到的头文件,其次,正式调用。例如(我的libdrawAMResults DLL用于绘图):
#include "libdrawAMResults.h"#include "mclmcrrt.h"#include "mclcppclass.h"//初始化MCRif(!mclInitializeApplication(NULL,0) ){ MessageBox(_T("Could not initialize MCR!"));}//初始化libif(!libdrawAMResultsInitialize()){ MessageBox(_T("Could not initialize libdrawAMResults!"));}//上面的初始化可以放在程序中的InitInstance()函数中。try{ mwArray a(3,3,mxDOUBLE_CLASS); //double ha[9]={0,0.953,-0.544,1.189,0.177,-0.358,0.358,1.811,-0.358}; //a.SetData(ha,9); a(1,1) = 0; a(1,2) = 1.189; a(1,3) = 0.358; a(2,1) = 0.953; a(2,2)=0.177; a(2,3) = 1.811; a(3,1) = -0.544; a(3,2)=-0.358; a(3,3) = -0.358; //上面两种方式初始化mwArray,得到的矩阵才是一样。}catch (const mwException& e){ MessageBox(_T("mwException!"));}
最后,结果如下:
- VC++调用Matlab编写的DLL(混合编程)
- DLL文件 VC++&Matlab混合编程( 调用DLL)
- VC++和Matlab混合编程(在VC中调用将.m文件生成的DLL)
- Vc调用matlab导出的dll,实现vc与matlab混合编程
- VC与Matlab混合编程(在VC中调用DLL)
- VC与Matlab混合编程(在VC中调用DLL) .
- VC与Matlab混合编程(在VC中调用DLL)
- VC与Matlab混合编程(在VC中调用DLL)
- matalb7与VC2008混合编程DLL方法(三)VC调用matlab的DLL库函数
- Matlab与c++混合编程[四.通过VC调用Matlab编译产生的dll文件]
- VC与Matlab混合编程(在VC中调用.m文件编译生成的DLL)
- VC调用matlab dll方式混合编程(c风格--例2)<二>
- VC与Matlab混合编程实例(Matlab7.0函数转换成VC的.dll)
- VC++与Matlab混合编程之二:调用Matlab中M函数转换成DLL文件的形式
- 【混合编程实例】C/C++调用FORTRAN编写的DLL
- matlab/C混合编程--mex文件的编写、编译、调用
- VC与Matlab混合编程之调用动态链接库dll<二>
- VC与Matlab混合编程之调用动态链接库dll(C++)——<二>
- talend
- Android+Packaging+Problem
- rpm安装和卸载脚本的工作原理[重点关注]
- 数据质量交流总结
- MongoDB文件存取操作
- VC++调用Matlab编写的DLL(混合编程)
- (协同智能计算系统)软件≥程序+ 界面
- C语言:内存字节对齐详解 (转载)
- Linux 2.6内核中新的锁机制--RCU
- 视频编码中封装格式RMVB,AVI,264
- GRASP设计模式 - 概要篇
- Datacleaner
- 数据质量流程
- CreateThread, AfxBeginThread,_beginthread, _beginthreadex的区别