matlab引擎成功在VC++中运行(VC++6.0 MFC)
2013-06-18 13:07
274 查看
一,对VC++的配置
工具->选项->目录,分别配置lib和include
图一
图二
接下来是每创建一个工程都需要修改的一个配置:
工程->设置->连接,添加入libmx.lib libmat.lib libeng.lib
图三
二,工程创建
在菜单栏menu上建立菜单,比如此处画图(ID什么的自己命名好,我的是ID_DATA_IN,最好见名知意)
图四
按Ctrl+W进入MFC classwizard
图五
插入代码如下:
CString curPath;
Engine *ep;
mxArray *T = NULL, *D = NULL;
double t[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// engOpen
if (!(ep = engOpen(NULL))) {
AfxMessageBox ("Can't start MATLAB engine");
return;
}
// engPutVariable [mxCreateDoubleMatrix,mxDestroyArray]
T = mxCreateDoubleMatrix(1, 10, mxREAL);
memcpy((void *)mxGetPr(T), (void *)t, sizeof(t));
engPutVariable(ep, "T", T);
engEvalString(ep, "D = .5.*(-9.8).*T.^2;");
engEvalString(ep, "figure;");
engEvalString(ep, "line(T,D,'Color',[0,0.5,1],'Marker','s','MarkerFaceColor',[1 1 0]);");
engEvalString(ep, "title('Position vs. Time for a falling object');");
engEvalString(ep, "xlabel('Time (seconds)');");
engEvalString(ep, "ylabel('Position (meters)');");
engEvalString(ep, "grid on;");
mxDestroyArray(T);
// engGetVariable
engEvalString(ep, "K=(1:length(D))'; D=[K,D',sin(K)]");
D=engGetVariable(ep, "D");
double *dReal;
dReal = mxGetPr(D);
CString s,sTmp;
int m,n;
m = mxGetM(D);
n = mxGetN(D);
s.Format("(m,n)=(%d,%d)\r\n",m,n);
for(int i=0; i<m; i++){
// please change <
for(int j=0; j<n; j++){
// please change <
sTmp.Format("%5.11f",dReal[j*m+i]);
while(sTmp.GetLength()<17){
sTmp = " "+sTmp;
}
s=s+sTmp+" ";
}
s=s+"\r\n";
}
s=s+"\r\n";
this->SetDlgItemText(IDC_EDIT1,s);
mxDestroyArray(D);
// engClose
AfxMessageBox ("Press enter to close engine");
engClose(ep);
最前面不要忘记加#include “engine.h”,之前我直接把该头文件拷贝到了工程的文件夹里,保险起见~
此处也可以先创建一个类然后在函数中应用。
图六
如果出现报错 “ Can't start MATLAB engine”,那么可以尝试启动matlab command window
1,运行cmd
2,在DOS命令行把文件夹定位到matlab中的bin下,(cd+文件夹名)运行matlab/regserver
工具->选项->目录,分别配置lib和include
图一
图二
接下来是每创建一个工程都需要修改的一个配置:
工程->设置->连接,添加入libmx.lib libmat.lib libeng.lib
图三
二,工程创建
在菜单栏menu上建立菜单,比如此处画图(ID什么的自己命名好,我的是ID_DATA_IN,最好见名知意)
图四
按Ctrl+W进入MFC classwizard
图五
插入代码如下:
CString curPath;
Engine *ep;
mxArray *T = NULL, *D = NULL;
double t[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// engOpen
if (!(ep = engOpen(NULL))) {
AfxMessageBox ("Can't start MATLAB engine");
return;
}
// engPutVariable [mxCreateDoubleMatrix,mxDestroyArray]
T = mxCreateDoubleMatrix(1, 10, mxREAL);
memcpy((void *)mxGetPr(T), (void *)t, sizeof(t));
engPutVariable(ep, "T", T);
engEvalString(ep, "D = .5.*(-9.8).*T.^2;");
engEvalString(ep, "figure;");
engEvalString(ep, "line(T,D,'Color',[0,0.5,1],'Marker','s','MarkerFaceColor',[1 1 0]);");
engEvalString(ep, "title('Position vs. Time for a falling object');");
engEvalString(ep, "xlabel('Time (seconds)');");
engEvalString(ep, "ylabel('Position (meters)');");
engEvalString(ep, "grid on;");
mxDestroyArray(T);
// engGetVariable
engEvalString(ep, "K=(1:length(D))'; D=[K,D',sin(K)]");
D=engGetVariable(ep, "D");
double *dReal;
dReal = mxGetPr(D);
CString s,sTmp;
int m,n;
m = mxGetM(D);
n = mxGetN(D);
s.Format("(m,n)=(%d,%d)\r\n",m,n);
for(int i=0; i<m; i++){
// please change <
for(int j=0; j<n; j++){
// please change <
sTmp.Format("%5.11f",dReal[j*m+i]);
while(sTmp.GetLength()<17){
sTmp = " "+sTmp;
}
s=s+sTmp+" ";
}
s=s+"\r\n";
}
s=s+"\r\n";
this->SetDlgItemText(IDC_EDIT1,s);
mxDestroyArray(D);
// engClose
AfxMessageBox ("Press enter to close engine");
engClose(ep);
最前面不要忘记加#include “engine.h”,之前我直接把该头文件拷贝到了工程的文件夹里,保险起见~
此处也可以先创建一个类然后在函数中应用。
图六
如果出现报错 “ Can't start MATLAB engine”,那么可以尝试启动matlab command window
1,运行cmd
2,在DOS命令行把文件夹定位到matlab中的bin下,(cd+文件夹名)运行matlab/regserver
相关文章推荐
- matlab 7与vc/mfc混合编程 脱离运行环境,移植代码
- vc2005编译程序成功后运行不了提示“没有找到MSVCP80D.dll...“的解决方法
- 利用Matlab引擎实现VC和Matlab的混合编程
- [VC/MFC]一条语句实现程序运行时隐藏窗口
- vc MFC 发邮件代码 努力后成功了
- VC++与Matlab混合编程之引擎操作详解(1)
- VC6工程迁移到VC2008 SP1中,使用MFC 9.0静态链接后运行错误的解决办法
- vc中调用matlab引擎,如何写入循环!!!
- MATLAB与VC++混合编程(2)——利用MATLAB引擎
- MATLAB引擎方式实现VC与MATLAB混合编程
- MATLAB引擎方式实现VC与MATLAB混合编程
- VC++与Matlab混合编程之引擎操作详解(2)引擎API详解
- VC中调用matlab引擎
- VC/MFC中计算程序运行时间
- matlab安装成功,但是首次运行的时候提示安装程序错误
- 发布程序时的VC及MFC运行环境
- vc调用matlab的m文件混合编程(引擎方式)
- 使用matlab引擎的应用程序正常运行
- VC++与Matlab混合编程之引擎操作详解(3)数据类型mxArray的操作
- TLD算法(matlab和vc混编版本)源代码调试运行