您的位置:首页 > 编程语言 > MATLAB

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: