VC++中调用MATLAB产生的图形失败,请教高手
本帖最后由 koko1120 于 2010-5-30 20:54 编辑问题一:因为是新手,首次尝试,请问这种利用MATLAB compiler生成的dll文件的方法能在不装MATLAB的机子上独立运行吗?或者需要装什么辅助道具?
问题二:VC是怎么调用MATLAB通过mcc产生的dll文件的,下面是我的代码
硬件VC++6.0和MATLAB 2007b ,XP SP2
matlab'函数:
function y = class_compiler_func(f)
t = linspace(0,1,400);
y = sin(2*pi*f*t);
plot(t,y);
end
我的第一步:
class_compiler_func.ctf
class_compiler_func.dll
class_compiler_func.h
class_compiler_func.lib
以上是matlab mcc后产生的文件,我将它们拷贝到了我的工程文件夹下面,工程名是MCC
我的第二步:
就是建立一个exe工程,有一个窗口,只有一个确定按钮
按确定后跳出一个图
主要是在dlg的cpp文件中的初始化部分添加
// TODO: Add extra initialization here
if (!mclInitializeApplication(NULL,0))
{
MessageBox("Could not initialize the application!");
return FALSE;
}
if (!class_compiler_funcInitialize())
{
MessageBox("Could not initialize the library!");
return FALSE;
}
return TRUE;// return TRUEunless you set the focus to a control
}
然后再最后面两个消息函数
void CCMCDlg::OnOK()
{
// TODO: Add extra validation here
double fValue = 1.0; //Hz
mxArray *f;
mxArray *y = NULL;
f = mxCreateDoubleMatrix(1,1,mxREAL);
memcpy(mxGetPr(f), &fValue, sizeof(double));
mlfClass_compiler_func(1, &y, f);
mclWaitForFiguresToDie(NULL);
mxDestroyArray(f); f = NULL;
mxDestroyArray(y); y = NULL;
//CDialog::OnOK();
}
void CCMCDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
class_compiler_funcTerminate();
mclTerminateApplication();
CDialog::OnClose();
}
我的第三步是设置VC设置:
在VC++ IDE 中选择Tools->Options->Directories
设置<我的Matlab根目录>\extern\include\
设置<我的Matlab根目录>\extern\lib\win32\Microsoft
Project->Setting->link下
在general下面的object/library modules下面添加了mclmcrrt.lib 和我matlab产生的那个lib
执行后,出错显示Could not initialize the library!");为什么,我是按照视频教程做的,为什么视频里面成功了,我确报错,高手请教 问题一:因为是新手,首次尝试,请问这种利用MATLAB compiler生成的dll文件的方法能在不装MATLAB的机子上独立运行吗?或者需要装什么辅助道具?
问题二:VC是怎么调用MATLAB通过mcc产生的dll文件的,下面是我的代 ...
执行后,出错显示Could not initialize the library!");为什么,我是按照视频教程做的,为什么视频里面成功了,。。。
koko1120 发表于 2010-5-30 20:52 http://forum.simwe.com/images/common/back.gif
关于问题一:简短的回答是“可以”。你需要在目标电脑上安装MCR。这个问题在论坛上已经讨论很多次了。这里就不再重复了。
关于问题二:你是如何“执行”的?是在VC里面环视在Windows的文件管理器了?试试把那个ctf文件以及dll文件拷贝到VC程序的编译目录中(Debug或Release),也就是和产生的可执行文件在相同的目录。另外,是什么视频啊? 2# taohe
谢谢,朋友,我现在又试了下,现在居然可以实现了,但是我单独到debug里面点击exe文件,居然失败,说找不到dll文件,真是纳闷,请教朋友,视频是ilovematlab论坛上的一个VC与matlab混编的视频,问题我已经发到论坛上,谢谢,麻烦您了 嗯,找不到dll应该很好理解:因为需要的那个dll文件不再当前目录,也不在系统的PATH环境变量设置中。你的dll是在当前VC工程文件的目录中。
而如果在VC里执行编译好的exe文件时,当前的VC工程所在目录也是一个有效的目录。
另外,如果真想用混编技术解决实际问题的话,需要多看点文档或者参考资料。 4# taohe
您说的很有道理,我学习,今天总算有点收获,至少通过一个例子,对一个模糊的东西有点概念了,我知道这样有点急功近利,但是主要是我不知道该如何下手,我现在应为赶时间想把我给你的那个方案做出来,所以有点着急了,不好意思啊,朋友,谢谢了
页:
[1]