找回密码
 注册
Simdroid-非首页
楼主: rocwoods

程序中使用MATLAB编译产生的DLL (VC6.0, MATLAB R2010b, mwArray)

[复制链接]
发表于 2010-12-7 22:15:37 | 显示全部楼层 来自 北京
本帖最后由 bainhome 于 2010-12-7 22:16 编辑

我今天得空儿对taohe老兄和吴鹏老弟的两个帖子细细看完并操作了一下,我在这里补充一下个人的心得:
1.首先指出这个问题实在郁闷:如果你直接点击论坛上的【复制代码】按钮粘贴到vs中,会提示出现“error C4335”的错误,这应该是字符编码的问题,需要把向vs拷贝的代码先复制到word文件中,然后再复制到vs里就对了(我怕不保险,还搞得更复杂---论坛代码→word→txt→visual studio)。
2.我的环境:visual studio 2005+MATLAB2010b+windows XP
3.mex -setup、mbuild -setup、安装MCR(即使本机安装了MATLAB也要装MCR)这些都是老生常谈不再多说
4.配置方法基本与taohe贴内的相同,唯一一点区别在于如下链接1楼所示图片中include路径去掉了“include”后面的“win32”,mclmcr.h和mclcppclass.h俩文件不在win32下:
【原创】程序中使用MATLAB编译产生的DLL
然后编译时出现错误error C3861,也就是让roc也曾经郁闷过的
  1. 'mclInitializeApplication_proxy' : undeclared identifier
复制代码
不过他也给出了问题的答案,但可能没装visual studio 2005,故并未给出在2005下的实际结果,今天我试了试,的确可以不要mclmcr.h和mclcppclass.h这两个头文件,把它们注释掉,文件编译一切正常,这和roc在vs 6.0下所做的尝试完全一致。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-3-6 14:14:53 | 显示全部楼层 来自 陕西西安
Simdroid开发平台
膜拜一下牛人!不断学习研究才是王道!

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-10-24 16:16:09 | 显示全部楼层 来自 安徽蚌埠
好贴学习了
楼主辛苦
回复 不支持

使用道具 举报

发表于 2011-10-28 21:04:40 | 显示全部楼层 来自 江苏南京
谢谢,这个很好用,但我有一个.mat型文件,怎么办呢
回复 不支持

使用道具 举报

发表于 2012-6-6 09:24:53 | 显示全部楼层 来自 辽宁大连
我请问一下,按照上面的步骤折腾完后,编译通过,运行时丢了一大堆dll文件。
一开始是没有mclmcrrt7_15.dll,网上下了一个放在程序目录下
然后写着libmx.dll丢失,网上又下了一个放在程序目录下
之后又丢失icuuc24.dll..........实在下不动了》。。。。。。。。
蛋都碎了....求解释啊
谢谢》。。。。。。。。。。。
回复 不支持

使用道具 举报

发表于 2012-6-13 19:05:14 | 显示全部楼层 来自 黑龙江哈尔滨
liu_fanyi 发表于 2012-6-6 09:24
我请问一下,按照上面的步骤折腾完后,编译通过,运行时丢了一大堆dll文件。
一开始是没有mclmcrrt7_15.dll ...

我的问题和你一样,编译通过之后dll丢失····也不知道怎么解决
回复 不支持

使用道具 举报

发表于 2012-6-13 19:59:11 | 显示全部楼层 来自 黑龙江哈尔滨
liu_fanyi 发表于 2012-6-6 09:24
我请问一下,按照上面的步骤折腾完后,编译通过,运行时丢了一大堆dll文件。
一开始是没有mclmcrrt7_15.dll ...

刚刚发现,我跑的那个程序是在matlab2011a条件下编译的,在D:\Program Files\MATLAB\R2011b\runtime\win32目录下存在mclmcrrt7_15.dll ;而我的电脑里面装的是matlab2011b的版本,在相同目录下存在的是mclmcrrt7_16.dll
···但是不知道这个问题该如何解决
回复 不支持

使用道具 举报

 楼主| 发表于 2012-6-14 09:01:47 | 显示全部楼层 来自 北京
birdcc 发表于 2012-6-13 19:59
刚刚发现,我跑的那个程序是在matlab2011a条件下编译的,在D:\Program Files\MATLAB\R2011b\runtime\win3 ...

用2011b再编译一下。
回复 不支持

使用道具 举报

发表于 2012-6-14 09:33:26 | 显示全部楼层 来自 黑龙江哈尔滨
rocwoods 发表于 2012-6-14 09:01
用2011b再编译一下。

谢谢,已经解决这个问题了
回复 不支持

使用道具 举报

发表于 2013-1-8 16:47:40 | 显示全部楼层 来自 安徽合肥
楼主您好,我和25楼的情况一模一样,不知道哪出问题了,我的也是2010b。跟着步骤一步一步来的。请问如何解决呢
回复 不支持

使用道具 举报

 楼主| 发表于 2013-1-9 11:11:00 | 显示全部楼层 来自 北京
jxhxfen2008 发表于 2013-1-8 16:47
楼主您好,我和25楼的情况一模一样,不知道哪出问题了,我的也是2010b。跟着步骤一步一步来的。请问如何解 ...

你是不是目标的电脑上不止一个mcr的版本?只保留一个和程序相关的MCR版本。
回复 不支持

使用道具 举报

发表于 2013-1-9 11:26:08 | 显示全部楼层 来自 安徽合肥
rocwoods 发表于 2013-1-9 11:11
你是不是目标的电脑上不止一个mcr的版本?只保留一个和程序相关的MCR版本。 ...

嗯,版主,我已经解决了。我的matlab是免安装的,可能系统变量的问题。我就又重新安装了一次,没有再出现问题,搞定了!!
谢谢哈!
回复 不支持

使用道具 举报

发表于 2013-1-10 14:34:33 | 显示全部楼层 来自 重庆


Matlab2012生成DLL文件与VS2005(VC)混合编程解决方法(折腾两天的成果)

Matlab的版本太多,使用起来很麻烦,我使用过maltab2010b.2007b.都没有成功,最后装了matlab2012才成功,不知道是不是我操作的问题。本人没有使用过matlab.以下是实现的过程。

参考http://forum.simwe.com/thread-801187-1-1.html

先建立一个简单的m文件:

function mcctest01



x=0:0.01:20;

y = x.*sin(x);



plot(x,y);

xlabel('x');

ylabel('y');

需要注意文件名,在vc中需要调用。

下一步,在MATLAB中进行编译设置,键入"mex -setup”,选择VC2005。

继续输入"mbuild -setup",和上面一样仍然选择VC2005。两步选择一样。

下一步,将m文件转换为可被VC调用的dll文件。在matlab中输入命令:

mcc -t -h -L C -W lib:libmcctest01 -T link:lib mcctest01.m

MATLAB会提示 -t -h -L 这三个参数已经不再使用了,不管它,工作目录中会生成一堆文件,其中的libmcctest01.h libmcctest01.lib libmcctest01.dll三个文件是我们所需要的。

下一步,在VC2005中添加配合MATLAB编程的lib目录和include目录。

在 " \Tools \ Options \ Projects and Solutions \ VC++ Directories" 中,在 " Include files " 和 " Library files " 中分别添加下列目录(默认安装位置):

" F:\Program Files\MATLAB\R2012a\extern\include "

"F:\Program Files\MATLAB\R2012a\extern\lib\win32\microsoft "

下一步,使用VC2005新建基于对话框的工程(mfcmcctest01),在 " \Project \ Properties \ Configuration Properties \ Linker \ Input " 中添加mclmcrrt.lib、libmcctest01.lib。将上述三个文件拷贝到VC工程所在目录,在Project菜单中Add Existing Item把mccmfc01.h添加到工程中。

下一步,编程。在恰当的位置添加 #include mccmfc01.h"。在mccmfc01.h中可以看到上面m文件中那个函数的C语言声明:

externLIB_libmcctest01_C_API

boolMW_CALL_CONVmlxMcctest01(intnlhs, mxArray *plhs[], intnrhs, mxArray *prhs[]);

在mccmfc01Dlg.cpp文件的OnInitDialog()加入MCR初始化函数mclInitializeApplication(NULL, 0)、与静态库初始化函数libmcctest01Initialize()。

BOOLCmccmfc01Dlg::OnInitDialog()

{

// TODO: Add extra initialization here

       if (!mclInitializeApplication(NULL, 0))

       {

              AfxMessageBox(_T("Cloudnot...."));

       }

       libmcctest01Initialize();   // 初始化

       returnTRUE;  // return TRUE  unless you set the focus to a control

}

在按键响应函数OnBnClickedButton1()添加m文件中定义的函数mlfMcctest01();,注意是mlfMcctest01(),而不是mcctest01()。这个地方让我吃了很多哑巴亏,浪费了很多时间。

voidCmccmfc01Dlg::OnBnClickedButton1()

{

       // TODO: Add your control notification handler code here

       mlfMcctest01();

}

编译完,运行即可。
回复 不支持

使用道具 举报

发表于 2013-1-10 14:37:30 | 显示全部楼层 来自 重庆
linweixu168 发表于 2013-1-10 14:34
Matlab2012生成DLL文件与VS2005(VC)混合编程解决方法(折腾两天的成果)

Matlab的版本太多,使用起来很 ...

按照 这个方法 我用的是 matlab2012 vs2008 ,没有成功 首先我没有找到 mccmfc01.h 文件,按照上面的方法好像不会产生这个文件,另外我编译
1>c:\documents and settings\administrator\桌面\灰色预测\mfcmcctest01\mfcmcctest01\mfcmcctest01dlg.cpp(75) : error C3861: “mclInitializeApplication”: 找不到标识符
1>c:\documents and settings\administrator\桌面\灰色预测\mfcmcctest01\mfcmcctest01\mfcmcctest01dlg.cpp(79) : error C3861: “libmcctest01Initialize”: 找不到标识符
1>c:\documents and settings\administrator\桌面\灰色预测\mfcmcctest01\mfcmcctest01\mfcmcctest01dlg.cpp(172) : error C3861: “mlfMcctest01”: 找不到标识符
哪位高手可以解答一下,非常感谢

点评

这类问题一般是MATLAB版本冲突,环境变量,或者必要的库没有包含。  发表于 2013-1-11 09:56
回复 不支持

使用道具 举报

发表于 2013-1-14 14:34:58 | 显示全部楼层 来自 重庆
linweixu168 发表于 2013-1-10 14:37
按照 这个方法 我用的是 matlab2012 vs2008 ,没有成功 首先我没有找到 mccmfc01.h 文件,按照上面的方法 ...

谢谢 已经搞定了 主要是这两个 mclInitializeApplication(NULL,0);
   libmcctest01Initialize(); 两个函数放的位置不对
回复 不支持

使用道具 举报

发表于 2013-1-20 21:30:42 来自手机 | 显示全部楼层 来自 湖北武汉
wingmyway 发表于 2010-9-17 18:35:04
对这个很感兴趣,不过在编译M文件时遇到了阻力。我是VC2008,matlab 07a
主要mbuild 设置时,并未出现08的编译器,如下
Select a compiler:  
[1]...

我也有这个问题,虽然采取了一些措施可以找到编译器,但是不保证没有其它问题。建议用最新版本,就没有这个问题了。
回复 不支持

使用道具 举报

发表于 2013-5-31 16:52:34 | 显示全部楼层 来自 甘肃
本帖最后由 machreehappy 于 2013-5-31 17:04 编辑

实验环境:VS2010, MATLAB R2010b, 麻烦各位解决一下,谢谢啦!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2013-5-31 17:39:45 | 显示全部楼层 来自 甘肃
问题已经解决,主要是没有设置环境变量,运行成功

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2013-5-31 19:36:47 | 显示全部楼层 来自 甘肃
我刚试过不加ctf文件,编译没有错误,但是运行的时候没有达到预期效果,出现以下问题

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-5-8 11:31 , Processed in 0.046545 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表