VC调用Matlab生成的DLL

本文介绍如何在VC环境中调用Matlab生成的对话框,包括Matlab和VC的配置步骤、解决内存错误的方法及代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

捉Matlab生成的对话框,嵌入到VC的对话框里。本文是第一步,做到在VC里,调
用Matlab,弹出对话框。

参考资料:深入浅出 MATLAB 7.X 混合编程 董维国 2005年 (章节号 7.4.1)

问题:

该书较早,采取的平台较老。

我的平台:

Win7 32位 旗舰版
Matlab R2010b(7.11) 
Vs2005

遇见的问题:

内存错误。如图:


原因:

经过网上查找,可能的原因如下:
a. 配置属性——常规——公共语言运行库支持——clr    没有效果
b. #include "mclcppclass.h"                              还是不行
c. 将dll 文件 加入到工程(增加——现有项)             没有效果。这个本来就没道理
d. 在调用函数前加上 xxxInitialize();                     !!!!有效

最后,经过测试,第四条,需要将引用的库初始化,是解决问题的关键。

========================================================================

以下是详细的过程:

一、 Matlab的设定

1. 设定Matlab的编译器

?
mex -setup
mbuild -setup

根据Matlab的提示,选择合适的编译器。这里选择Vs2005 的编译器。

2. 将.m文件编译生成所需的 .dll .lib .h文件

?
mcc -W cpplib:YouLibName -T link:lib YourMatlabFile.m

  参数含义:可以 help mcc 进行查看

生成后的文件包括:

由于只用到 .dll .lib .h文件,所以有这三个即可。有的教程里会提到.ctl文件,如果没有也不必担心。

是Matlab不同版本的原因。


二、 VS的设定

Vs的设定比较简单,与调用任何第三方(动态)库一样,需要加上两个目录:

1. 包含头文件目录 && 包含lib库目录
项目——属性——配置属性——C/C++——常规——附加包含目录

?
"D:\Program Files\MATLAB\R2010b\extern\lib" ;
"D:\Program Files\MATLAB\R2010b\extern\include"

这一步也可以在 工具——选项——项目和解决方案——VC++目录 里设置。这样对所
有的工程有效,不必每次都设置搜索目录。

2. 指定要调用的第三方库(即Matlab编译生成的dll 与 lib 文件)
项目——属性——配置属性——链接器——输入——附加依赖项

?
mclmcrrt.lib libEnd.lib(生成的.lib文件)

  若是较早的Matlab版本,可能会需要加入别的库。

三、 编写代码。

此处以 基于对话框的程序(bookTest)为例。

1. 将生成的 .lib .dll .h 文件拷贝到新建工程的源代码目录,并将.h文件添加进
工程。

2. 在bookTestDlg.h里包含动态库的头文件

?
#include "libEnd.h"

  

3. 在CbookTestDlg::OnInitDialog()里,对MCR及生成的库进行初始化

?
// TODO: 在此添加额外的初始化代码
if (!mclInitializeApplication(NULL,0))
{
MessageBox(_T( "Initilize error!" ));
return TRUE;
}
libEndInitialize();

  

4.为对话框添加按钮,在按钮的响应函数里添加代码:

?
void CbookTestDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
xxx(); // 生成的库里的函数
}

  

5. 在退出时,释放调用的库。

?
void CbookTestDlg::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
libEndTerminate();
mclTerminateApplication();
CDialog::OnClose();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值