有的时候,我们在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 。如下图所示:
![](https://box.kancloud.cn/2016-08-31_57c6b4a3eb381.gif)
其次,在“配置属性->链接器->常规”的“附加库目录”中添加MCR的lib库路径,我的路径是:
C:\Program Files\MATLAB\MATLAB Compiler Runtime\v713\extern\lib\win32\ microsoft。如下图所示:
![](https://box.kancloud.cn/2016-08-31_57c6b4a414938.gif)
最后,在“配置属性->链接器->输入”的“附加依赖项”中添加DLL中和程序中所依赖的lib库名称。如下图所示:
![](https://box.kancloud.cn/2016-08-31_57c6b4a431343.gif)
(3)VC++程序中的调用:(**详细的实例可在我的CSDN资源中下载:[http://download.csdn.net/detail/margin1988/3677489](http://download.csdn.net/detail/margin1988/3677489)**)
首先,包含所使用到的头文件,其次,正式调用。例如(我的libdrawAMResults DLL用于绘图):
~~~
#include "libdrawAMResults.h"
#include "mclmcrrt.h"
#include "mclcppclass.h"
//初始化MCR
if(!mclInitializeApplication(NULL,0) )
{
MessageBox(_T("Could not initialize MCR!"));
}
//初始化lib
if(!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!"));
}
~~~
最后,结果如下:
![](https://box.kancloud.cn/2016-08-31_57c6b4a4513ed.gif)
- 前言
- VC++中自定义热键及响应
- CFileDialog文件对话框
- VC++中客户区保存为BMP图片
- VC++读、写注册表
- VC++播放音频文件和音频数据的方法
- VC++调用Matlab编写的DLL(混合编程)
- VC++中文件读、写和其他相关操作汇总
- VC++获取系统当前时间
- VC++按钮控件字体设置
- VC++软件界面风格简单美化
- VC++中一些常用的数据类型之间的相互转化
- VC++中截取字符串的方法
- VC++中vector矢量的使用方法及随机相关
- VC++中结构体的定义及使用
- VC++中List Control控件的使用方法介绍
- VC++中窗口过程函数及其消息发送、响应机制介绍
- VC++中Ribbon编程架构及SDI架构多视图切换介绍
- 串口通信基础知识及VC++实现
- VC++中单个键盘按键的响应
- VC++中的计时器及多媒体高精度计时器
- VC++编写DLL导出函数及其调用方法
- VC++对话框(CDialog)的全屏显示及控件居中显示
- VC++对话框(CDialog)添加背景图片
- VC++图片控件(Picture Control)显示资源位图(BMP)、文件位图(BMP)、其它格式文件图片(JPG\PNG\BMP)的方法
- VC++对Access数据库的操作(查询、插入、更新、删除等)