VC++调用matlab引擎方法设置(个人总结)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“matlab精华个人总结”。
VC++调用matlab引擎找不到dll问题
最近尝试在Win7系统下,用VC++6.0调用MatlabR2010a引擎,正常配置后发现程序能够正常编译,但运行时报错如下,说找不到libmx.dll,网上查发现有不少人遇到这样的问题,有人说系统、软件都太新了,难免出问题,倒是有人提议系统变量路径配置不正确,尝试下确实可以。
下面把整个设置过程讲下:
要在VC中成功编译Matlab引擎程序,必须包含引擎头文件engine.h并引入Matlab对应的库文件libmx.lib、libmat.lib、libeng.lib。具体的说,打开一个工程后,做如下设置:
1)通过菜单工具/选项,打开选项页,点击项目和解决方案,然后在页面右面“显示以下内容的目录”下拉列表框中选择“包含文件”,添加路径:“D:Program filesMATLABR2010aexterninclude”。
2)选择“库文件”,添加路径:d:Program FilesMATLABR2010aexternlibwin32microsoft。
以上步骤1)、2)只需设置一次,因为是对VC++6.0整体工作环境的设置。
3)右击工程/属性,打开项目属性页,选择链接器/输入,在附加依赖项编辑框中,添加文件名libmx.lib libmat.lib libeng.lib libmex.lib,中间用空格隔开。
步骤3)对每个项目都要单独设定。另外有一种比较简单的方法,可以自动加载lib库文件,在工程的stdafx.h中写入以下语句: //自动连接Matlab库函数 #pragma comment(lib,“libeng.lib”)#pragma comment(lib,“libmx.lib”)#pragma comment(lib,“libmex.lib”)#pragma comment(lib,“libmat.lib”)4)如此设置后,能够正常编译,但运行时报错还说找不到dll文件,如下
而libmx.dll是存在于D:Program FilesMATLABR2010abinwin32文件夹中,而在Win7系统变量里Matlab在安装的时候时只写入了路径D:Program FilesMATLABR2010abin,故系统不会自动到其子文件中找dll,从而报错说找不到文件,这也解释了为什么旧版本的Matlab无此问题,因为可能旧版本的Matlab中没有将这些dll分离放到win32子文件夹中。所以只要在系统变量中包含路径D:Program FilesMATLABR2010abinwin32即可,右击我的电脑选择属性高级系统设置环境变量选择系统变量的新建如下图。
如果以上设置完成后,运行仍报错,可以尝试将VC++关掉再启动,我就是这样OK了!
单击画四朵花按钮,如图出现MATLAB绘图窗口: void CMATLABEngineDlg::OnPlotFollwer(){ // TODO: Add your control notification handler code here if(!r){
MeageBox(“没有启动matlab”,MB_OK|MB_ICONINFORMATION);
return;} //画四只花朵
engEvalString(ep,“z1=sym('(x^2+y^2)^(1/2)');”);engEvalString(ep,“z=sin(z1);”);engEvalString(ep,“subplot(2,2,1),ezsurf(z);”);engEvalString(ep,“z=sin(z1)*cos(z1);”);engEvalString(ep,“subplot(2,2,2),ezsurf(z);”);engEvalString(ep,“z=sin(z1)/tan(z1);”);engEvalString(ep,“subplot(2,2,3),ezsurf(z);”);engEvalString(ep,“z=cos(z1);”);engEvalString(ep,“subplot(2,2,4),ezsurf(z);”);}
引
擎!
“,”MATLAB
引
擎
void CMATLABEngineDlg::OnCancel(){ // TODO: Add extra cleanup here if(r){
}
engClose(ep);//关闭matlab引擎 }
CDialog::OnCancel();