matlab引擎成功在VC++中运行(VC++6.0 MFC)

一,对VC++的配置
     
              工具->选项->目录,分别配置lib和include
                              matlab引擎成功在VC++中运行(VC++6.0 MFC) - nichunquan1990 - nichunquan1990的博客
                                                                                          图一
                            matlab引擎成功在VC++中运行(VC++6.0 MFC) - nichunquan1990 - nichunquan1990的博客
                                                                                        图二
      接下来是每创建一个工程都需要修改的一个配置:
       工程->设置->连接,添加入libmx.lib libmat.lib libeng.lib
                    matlab引擎成功在VC++中运行(VC++6.0 MFC) - nichunquan1990 - nichunquan1990的博客
                                                                                           图三
二,工程创建 
                           在菜单栏menu上建立菜单,比如此处画图(ID什么的自己命名好,我的是ID_DATA_IN,最好见名知意)
                          matlab引擎成功在VC++中运行(VC++6.0 MFC) - nichunquan1990 - nichunquan1990的博客
                                                                                     图四
            
                    
                       按Ctrl+W进入MFC classwizard
                matlab引擎成功在VC++中运行(VC++6.0 MFC) - nichunquan1990 - nichunquan1990的博客
                                                                                                图五

插入代码如下:
     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”,之前我直接把该头文件拷贝到了工程的文件夹里,保险起见~
       此处也可以先创建一个类然后在函数中应用。
                                    matlab引擎成功在VC++中运行(VC++6.0 MFC) - nichunquan1990 - nichunquan1990的博客
                                                                                      图六
          如果出现报错    “   Can't start MATLAB engine”, 那么可以尝试启动matlab command window
                       1,运行cmd
                       2,在DOS命令行把文件夹定位到matlab中的bin下,(cd+文件夹名)运行 matlab/regserver
 












  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值