正文

VC++调用MATLAB engine2006-09-22 12:04:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/embed/18648.html

分享到:

VC++调用MATLAB engine 实验环境: MATLAB5.3, Visual C++ 6.0 SP3 1 生成几个连接库文件 在目录 c:\matlab\extern\include 下找这几个文件:libeng.def libmx.def libmat.def在DOS行命令下生成三个库文件:c:\msdev\bin\lib /def:libmat.def /out:libmat.libc:\msdev\bin\lib /def:libeng.def /out:libeng.libc:\msdev\bin\lib /def:libmx.def /out:libmx.lib把生成的三个LIB文件加入你的LINK项libeng.lib libmx.lib libmat.lib 2 写包含engine功能的文件 可以参考:c:\matlab\extern\examples\eng_mat\engwindemo.c注意: 可以用.CPP做后缀。比如:MATLAB.CPP 3 设置编译选项 把MATLAB.C加入你的PROJECTMATLAB.C的开头加入两行:    #INCLUDE "stdafx.h"    #INCLUDE "engine.h"包含其它头文件, 自己看情况而定 4 编写调用engine的函数 比如响应菜单调用自己的函数matlabPlot,而此函数的实现在matlab.cpp文件中实现,内容如下: #include "stdafx.h"#include "engine.h"int MatlabDraw(){Engine *ep;if (!(ep = engOpen(NULL))) {        MessageBox ((HWND)NULL,"Can't start MATLAB engine","Matlab Draw",MB_OK);        return 0;    }engEvalString(ep, "x=0:0.01:2*pi;y=sin(x);plot(x,y);");engEvalString(ep, "title('Matlab Drawing');");engEvalString(ep, "xlabel('X');");engEvalString(ep, "ylabel('Y');");MessageBox(NULL, "Press any key …","MATLAB Draw",MB_OK);engClose(ep);return 1;} 5 设置其它编译连接选项 PreProcessor 加上: MATLAB_MEX_FILEINCLUDE      加上: c:\matlab\extern\includeLIB          加上: c:\matlab\extern\include最后,如果有必要的话,在DOS命令行运行: MATLAB /regserver vc调用matlab引擎的一个简单例子 按如下步骤在vc中使用matlab引擎: (1)。启动vc6。0,建立一个mfc(exe)类型工程matlabengine。 (2)。在项目建立后,设置环境。 Tool->options->Diretories 页面下Show directories for 先选择Include Files,输入路径:D:\PROGRAMS\MATLAB6P5P1\EXTERN\INCLUDE 在选择Library Files,输入路径:D:\PROGRAMS\MATLAB6P5P1\EXTERN\LIB\WIN32\MICROSOFT\MSVC60 (我的matlab根目录是 D:\PROGRAMS\MATLAB6P5P1\ ;这里的设置对不同工程只需要一次) (3)。打开Project->Settings->Link页面,在Object/Library modules 中加入libmatlb.lib libeng.lib libmx.lib。(这里对每个工程都要设置,并且根据需要选不同的库) (4)  在工程目录的view的头文件中加入 ##include "engine.h" (5) 在about 对话框加入一个按钮,在其按钮响应函数如下: void CAboutDlg::OnButton1() {       Engine *ep;       double t[1];                     t[0]=6.28;       mxArray *T=NULL;       if(!(ep=engOpen(NULL)))       {               AfxMessageBox("Can not open the matlab engine!");               exit(-1);       }       T=mxCreateDoubleMatrix(1,1,mxREAL);       memcpy((char*)mxGetPr(T),(char*)t,1*sizeof(double));       engPutVariable(ep,"T",T);       engEvalString(ep,"T1=0:pi/48:T;");       engEvalString(ep,"D=sin(T1)");       engEvalString(ep,"plot(T1,D,'r-');");       engEvalString(ep,"xlabel('t‘);");       engEvalString(ep,"ylabel('sin(t)');");       engEvalString(ep,"title('sin(x)的图像');");           mxDestroyArray(T);         } (06.10.1 补充) 运用现成的MATLAB引擎类,加入到VC中,更符合OOP思想。值得推荐!

阅读(7182) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册