或者再试一下,在运行“mex -setup“之前,先运行
D:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT
已经试过了,不行的。
用VC与Matlab混合编程遇到runtime错误
在同一个程序中要调用两个不同的接口连接,a.dll,b.dll,在VC中调用了a后,关闭并释放a的接口链接和MCR,再调用b时出现会出现runtime error。不知何故?我反复阅读了董先生的专著“深入浅出Matlab7.x混合编程”,还是无法解决 原帖由 wangjun2008 于 2007-11-26 11:54 发表 http://www.simwe.com/forum/images/common/back.gif在同一个程序中要调用两个不同的接口连接,a.dll,b.dll,在VC中调用了a后,关闭并释放a的接口链接和MCR,再调用b时出现会出现runtime error。不知何故?我反复阅读了董先生的专著“深入浅出Matlab7.x混合编程”, ...
请参阅下面帖子中的回帖。也就是把对dll的初始化和终止放到vc程序的初始化和结束的地方。
http://www.simwe.com/forum/thread-809320-1-1.html
deploytool中的问题请教
运行deploytool后,选择“builder for java”,新建一个工程untitled2.prj,也将.m文件加入到untitled2class文件夹中了,点击“build the project”按钮后,在matlab命令窗口出现以下错误:mcc -W java:untitled2,untitled2class -d D:\My Documents\MATLAB\untitled2\src -T link:lib -v class{untitled2class:D:\My Documents\MATLAB\drawplot.m}
mcc -W java:untitled2,untitled2class -d D:\My Documents\MATLAB\untitled2\src -T link:lib -v class{untitled2class:D:\My Documents\MATLAB\drawplot.m}
Compiler version: 4.6 (R2007a)
Processing C:\Program Files\MATLAB\R2007a\toolbox\matlab\mcc.enc
Processing C:\Program Files\MATLAB\R2007a\toolbox\database\mcc.enc
Processing include files...
2 item(s) added.
Processing directories installed with MCR...
The file D:\My Documents\MATLAB\untitled2\src\mccExcludedFiles.log contains a list of functions excluded from the CTF archive.
2 item(s) added.
Generating MATLAB path for the compiled application...
Created 37 path items.
Begin validation of MEX files: Sat Dec 15 09:15:20 2007
Validating 'C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\deploywhich.mexw32'.
No conflicting M-file found.
Validating 'C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\readline.mexw32'.
No conflicting M-file found.
End validation of MEX files: Sat Dec 15 09:15:20 2007
Deleting 2 temporary MEX authorization files.
Removing: 'C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\mathworks_tmp_329_3680.auth'.
Removing: 'C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\mathworks_tmp_20312_3680.auth'.
Parsing file "D:\My Documents\MATLAB\drawplot.m"
(Referenced from: "Compiler Command Line").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\matlabrc.m"
(Referenced from: "Compiler Command Line").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\compiler\dirname.m"
(Referenced from: "Compiler Command Line").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\deployprint.m"
(Referenced from: "Compiler Command Line").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\printdlg.m"
(Referenced from: "Compiler Command Line").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\iofun\filesep.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\matlabrc.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\hgrc.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\matlabrc.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\codetools\initdesktoputils.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\matlabrc.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\local\initprefs.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\matlabrc.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\general\isdeployed.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\matlabrc.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\general\ispc.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\matlabrc.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\lang\lasterror.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\matlabrc.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\local\pathdef.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\matlabrc.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\general\pwd.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\matlabrc.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\general\recycle.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\matlabrc.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\local\reporterrorlogs.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\matlabrc.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\strfun\str2double.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\matlabrc.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\general\usejava.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\matlabrc.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\iofun\fileparts.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\dirname.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\timefun\datestr.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\deployprint.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\graphics\getappdata.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\deployprint.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\datatypes\isfield.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\deployprint.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\uitools\msgbox.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\deployprint.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\timefun\now.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\deployprint.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\datatypes\num2cell.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\deployprint.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\strfun\num2str.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\deployprint.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\graphics\orient.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\deployprint.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\graphics\print.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\deployprint.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\strfun\str2num.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\deployprint.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\iofun\tempname.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\deployprint.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\general\path.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\printdlg.m").
Parsing file "C:\Program Files\MATLAB\R2007a\toolbox\matlab\general\rmpath.m"
(Referenced from: "C:\Program Files\MATLAB\R2007a\toolbox\compiler\deploy\printdlg.m").
Generating file "D:\My Documents\MATLAB\untitled2\src\untitled2\untitled2MCR.java".
Generating file "D:\My Documents\MATLAB\untitled2\src\untitled2\untitled2class.java".
Generating file "D:\My Documents\MATLAB\untitled2\src\readme.txt".
Executing command: ""c:\Program Files\java\bin\javac" -verbose -classpath "D:\My Documents\MATLAB\untitled2\src";"C:\Program Files\MATLAB\R2007a\toolbox\javabuilder\jar\javabuilder.jar" -d "D:\My Documents\MATLAB\untitled2\src\classes" "D:\My Documents\MATLAB\untitled2\src\untitled2\untitled2MCR.java" "D:\My Documents\MATLAB\untitled2\src\untitled2\untitled2class.java""
ϵͳÕÒ²»µ½Ö¸¶¨µÄ·¾¶¡£
Error: An error occurred while shelling out to javac (error code = 1).
Unable to build executable.
??? Error executing mcc, return status = 1.
There were errors during compilation process.
并且在文件夹distrib中没有任何东西!
请教是怎么回事!多谢!
mbuild -setup 设置里就有一个可以选择的,就选它了!
你在另一篇for .net中提到过要设置它的,怎么设置呢?
还有就是deployment tool settings是不是也要设置呢?我使用的是7.4版本的
不知道怎么设置,请教一下!
谢谢!!!
重在解决问题!多谢! 你的java 的JRE和JDK版本是多少。看起来上面的编译过程用的是:
c:\Program Files\java\bin\javac
这个javac是你自己安装的吗?他的版本是多少。然后再看看matlab帮助中关于matlab builder for java的内容,在文档的开始部分应该有关于javac的版本需求以及必要的安装方法。
Good luck! 不知楼上关于MATLAB Builder for Java的问题解决了没有。
怀疑是你的JRE,JDK版本以及JDK安装后的设置有关。
刚才在MATLAB R2007b中做了试验,参考MATLAB在线帮助后发现,MATLAB R2007b推荐使用java6,也就是java 1.6.x版本的。于是下载了最新版JAVA SE1.6.0.03,安装以后根据matlab的文档中提出的建议,设置JAVA_HOME环境变量,我是在matlab环境中试验的,也就是,在运行deploytool之前,先运行下面这行:
setenv('JAVA_HOME', 'H:\Program Files\Java\jdk1.6.0_03');
如果不运行这个,会出现类似于你上面提出的错误。
于是成功编译你上面提到的myadd例子。希望这些有助于你排错。 谢谢LZ老师分享,LZ的方法已经测试成功
最近在做vc和matlab神经网络模块结合的程序,请问有什么需要注意的地方吗?
建议将
#include "mclmcr.h"
#include "mclcppclass.h"
改为
#include <mclmcr.h>
#include <mclcppclass.h> taohe兄能否把使用vs2005+matlab7.5混编中,使用com形式和使用dll形式的不同之处,以及各自的优缺点做个介绍?谢谢。 拜读过您的文章《程序中使用MATLAB编译产生的DLL (VS2005, MATLAB7.5, mwArray)》,您所说的是控制台的方法。我把它应用到MFC工程的时候,出现如下问题:
// initialize lib
if( !libmyadd2Initialize())
{
str+="Could not initialize libmyadd2!\r\n";
edRes->SetWindowText(str);
return;
}
提示了“Could not initialize libmyadd2”。也就是libmyadd2Initialize返回了false。
我实在很苦恼,如果您有好的解决办法,请告诉我,不胜感激。 还有一个问题,请教一下:如何在没有安装过Matlab的机器上运行这个的程序呢?需要作哪些部署?
总是提示Could not initialize the application!。
要把Matlab的文件拷过去再一个个剥离开很晕啊,文件太碎了。
回复 31# 的帖子
Would you like mex to locate installed compilers /n? _只要选择n就可以看到其他编译器的列表了 我也出现了同fspider 一样的问题~~~~
:Q :Q :Q 我所有步骤按照楼主说的做,但到最后编译的时候出现这样的错误:
1>------ 已启动生成: 项目: testmyadd2_r2007b, 配置: Release Win32 ------
1>正在编译...
1>stdafx.cpp
1>正在编译...
1>testmyadd2_r2007b.cpp
1>E:\PGXP\MATLAB\R2007b\extern\include\mclcppclass.h(474) : warning C4793: “vararg”: 导致生成函数“mwArray mwArray::Get(mwSize,...)”的本机代码
1> E:\PGXP\MATLAB\R2007b\extern\include\mclcppclass.h(465) : 参见“mwArray::Get”的声明
1>E:\PGXP\MATLAB\R2007b\extern\include\mclcppclass.h(484) : warning C4793: “vararg”: 导致生成函数“const mwArray mwArray::Get(mwSize,...) const”的本机代码
1> E:\PGXP\MATLAB\R2007b\extern\include\mclcppclass.h(475) : 参见“mwArray::Get”的声明
1>E:\PGXP\MATLAB\R2007b\extern\include\mclcppclass.h(495) : warning C4793: “vararg”: 导致生成函数“mwArray mwArray::Get(const char *,mwSize,...)”的本机代码
1> E:\PGXP\MATLAB\R2007b\extern\include\mclcppclass.h(485) : 参见“mwArray::Get”的声明
1>E:\PGXP\MATLAB\R2007b\extern\include\mclcppclass.h(506) : warning C4793: “vararg”: 导致生成函数“const mwArray mwArray::Get(const char *,mwSize,...) const”的本机代码
1> E:\PGXP\MATLAB\R2007b\extern\include\mclcppclass.h(496) : 参见“mwArray::Get”的声明
1>E:\PGXP\MATLAB\R2007b\extern\include\mclcppclass.h(1491) : warning C4793: “vararg”: 导致生成函数“void mclcppMlfFeval(HMCRINSTANCE,const char *,int,int,int,...)”的本机代码
1> E:\PGXP\MATLAB\R2007b\extern\include\mclcppclass.h(48) : 参见“mclcppMlfFeval”的声明
1>.\testmyadd2_r2007b.cpp(6) : fatal error C1083: 无法打开包括文件:“libmyadd2.h”: No such file or directory
1>AssemblyInfo.cpp
1>生成日志保存在“file://e:\我的文档\Visual Studio 2005\Projects\testmyadd2_r2007b\testmyadd2_r2007b\Release\BuildLog.htm”
1>testmyadd2_r2007b - 1 个错误,5 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========
这是为什么呢?
郁闷
我编了一个m文件,用Vc6 + Matlat 7的MFC程序测试通过,但改到VS2005+MatlabR2007b中,编译通过了,但调试到if(!libmyfuncInitialize()){...}时,程序就死了,不知是怎么回事,请高手指点指点!!不胜感激!!
好贴
好贴子,这几天正要使用MATLAB R2007B和VISUAL C++2005混编程序,要把M代码转到VC++2005工程中。你的帖子真是太好了。谢谢楼主,谢谢。
回复 20# 的帖子
在DOS窗口执行,会提示找不到libmyadd2.lib库文件。而当把库文件复制过去后,程序的编译就会出错,会看不到结果了。回复 23# 的帖子
这个请你看下Matlab说明文件,输入“mbuild -setup”后,选择N,然后选择7,然后选择Y,再确认路径就可以了。能否,看一下代码,谢谢
GetDlgItemText(hwndDlg,IDC_EDIT2,NumBuffer,sizeof(NumBuffer));Length=atof(NumBuffer);
GetDlgItemText(hwndDlg,IDC_EDIT3,NumBuffer,sizeof(NumBuffer));
Hight=atof(NumBuffer);
mclInitializeApplication(NULL,0);
GuassInitialize();
mwArray a(1, 1,mxDOUBLE_CLASS,mxREAL);
mwArray b(1, 1,mxDOUBLE_CLASS,mxREAL);
mwArray c(1, 1,mxDOUBLE_CLASS,mxREAL);
a(1,1)=Length;
b(1,1)=Hight;
Guass(1,c,a,b);
double cResult;
c.GetData (&cResult,1);
Result=c(1,1);
GuassTerminate();
mclTerminateApplication();
Result=cResult/3.14159;
sprintf_s(buffer,"%2.2f%%",Result);
SetDlgItemText(hwndDlg,IDC_RESULT,buffer);
帮忙看一下代码,谢谢
这是VC调用matlab函数,先从对话框中获取矩形区域的高和宽,然后调用matlab计算高斯分布,在矩形区域中所占的比例,最后输出在对话框上,编译链接都没有错误,但是运行是出错。
m文件为
function z=Guass(a,b)
syms x y;
z=dblquad('exp(-x.^2-y.^2)',-a/2,a/2,-b/2,b/2);
end
谢谢了,goodmorningxr@126.com 原帖由 taohe 于 2007-10-24 19:10 发表 http://forum.simwe.com/images/common/back.gif
这个程序是个命令行程序,如果没有在VS2005的IDE中执行的话,最好开一个DOS窗口,进入程序所在目录,然后执行程序,这样就能看到运行结果,不要在Explorer中运行。
我把帖子里的程序按原样运行一遍(包含.dll的四个文件也和vc源程序在同一目录下),窗口也是一闪而过,能看出结果是对的。
但在dos命令下运行,提示unable to locate component ,This application has failed to start because libmyadd2.dll was not found. Re-installingthe application may fix this problem.
事实上,我直接去debug目录下运行testmyadd2_r2007b.exe时,也出现上述错误提示,无法运行
请问是什么原因?谢谢
我的matlab版本和visual studio 版本和楼主都是一样的,matlabr2007b V7.5版本,
和VS2005 原帖由 axius 于 2008-8-5 04:19 发表 http://forum.simwe.com/images/common/back.gif
我把帖子里的程序按原样运行一遍(包含.dll的四个文件也和vc源程序在同一目录下),窗口也是一闪而过,能看出结果是对的。
但在dos命令下运行,提示unable to locate component ,This application has failed...
自问自答:
把mcc命令产生的 .dll and .ctf 文件拷到C:\ProgramFiles\Microsoft Visual Studio 8\Common7\IDE
还要把C:\ProgramFiles\Microsoft Visual Studio 8\Common7\IDE; 加到environment variable 的path里面
这样就OK了.
再问一个问题, 楼主介绍时用的C++程序是一个Win32 Console程序,而不是Windows图形界面的程序
请问如果VC里面已经编好的主程序是Windows 图形界面程序,那么相应在设置和程序里要做哪些改动呢?
感谢