资源描述:
《C++调用MATLAB引擎的问题》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、VC++调用MATLAB引擎的问题,怎样把编辑框中的数据传输到MATLAB中并计算?2010-9-1009:38提问者:kxn0831
2、浏览次数:922次比如说做个简单的加法,三个编辑框,编辑框变量分别为:m_m1,m_m2,m_result,请问加什么语句可以实现以上的功能?有个小程序是错的希望指正,可能错的都离谱了,见笑。voidCMATLABEngineDlg::OnMATLABEngine(){Engine*ep;MessageBox("单击确定按钮,Windows正在准备启动Matlab引擎!","Matlab引擎",MB_OK
3、MB_ICONINFORMATION);if(!
4、(ep=engOpen(" ")))//打开Matlab引擎{fprintf(stderr,"Matlab引擎启动失败!");MessageBox("Matlab引擎启动失败!","Matlab引擎",MB_OK
5、MB_ICONERROR);exit(-1);}UpdateData(true);//将矩阵变量写入Matlab引擎的工作区engPutVariable(ep,"m_m1",m_m1);//通过Matlab引擎执行Matlab命令engEvalString(ep,"m_result=m_m1+m_m2");UpdateData(false);MessageBox("关
6、闭Matlab引擎,系统将退出Matlab应用程序!","Matlab引擎",MB_OK
7、MB_ICONINFORMATION);engClose(ep);//TODO:Addyourcontrolnotificationhandlercodehere}这个错误显示是:D:ProgramFilesMicrosoftVisualStudioMyProjectsMATLABEngineMATLABEngineDlg.cpp(198):errorC2664:'engPutVariable':cannotconvertparameter3from'double'to'conststru
8、ctmxArray_tag*'Thereisnocontextinwhichthisconversionispossible执行cl.exe时出错.十分感谢,您的帮助!问题补充:谢谢一楼的回答,我的基础比较差,我用了你提供的方法,还是无法得到满意的结果,请看:mxArray*T=NULL,*P=NULL,*Q=NULL;doublescore;//formmatrixT=mxCreateDoubleMatrix(1,1,mxREAL);memcpy((void*)mxGetPr(T),(void*)score,sizeof(score));P=mxCreateDoubleMatrix(1
9、,1,mxREAL);memcpy((void*)mxGetPr(P),(void*)score,sizeof(score));Q=mxCreateDoubleMatrix(1,1,mxREAL);memcpy((void*)mxGetPr(Q),(void*)score,sizeof(score));//WriteintoMATLABEngineWorkarea*T=&m_m1;*P=&m_m2;*Q=&m_result;engPutVariable(ep,"T",T);engPutVariable(ep,"P",P);engPutVariable(ep,"Q",Q);UpdateDa
10、ta(true);//将矩阵变量写入Matlab引擎的工作区engEvalString(ep,"Q=P+T");//释放矩阵变量T占用的内存空间UpdateData(false);mxDestroyArray(T);mxDestroyArray(P);mxDestroyArray(Q);您看还需要添加些什么呢?现在提示的错误是:errorC2440:'typecast':cannotconvertfrom'double'to'void*'errorC2582:'mxArray_tag':'operator='functionisunavailable我来帮他解答输入内容已经达到长度限制还
11、能输入 9999 字插入图片删除图片插入地图删除地图插入视频视频地图参考资料:匿名回答提交回答取消2010-9-1616:49满意回答我几年以前做过这样的混合编程,下面是运行正确的代码片段,供你参考:单个变量也要定义成1X1的矩阵形式,如doublesample[1]={0};sizeof括号里面应该是变量的数据类型,如double时间长了,我都有点忘了,希望给你提供帮助。voidCBsplineDlg::OnButtonStart