MATLAB编译并调用C、C++程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

MATLAB编译并调用C、C++程序MATLAB的C、C++程序编译器的设置:在命令窗口中输入:mex-setup,接着按照提示进行即可完成C、C++程序编译器的设置。在MATLAB中编译C、C++程序:C、C++程序的格式以test.cpp为例,如下示:#includemex.h//必须#includemath.h//程序功能实现函数voidDesc2Pol(doubledbX,doubledbY,double*pdbA,double*pdbG){*pdbA=sqrt(dbX*dbX+dbY*dbY);if(dbY==0){if(dbX0){*pdbG=-90;}else{*pdbG=90;}}else{*pdbG=atan(dbX/dbY);}}//Matlab的接口函数,必须而且格式也一样voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){/*其中nlhs为在Matlab环境中调用该函数时要求返回参数的个数nrhs为在Matlab环境中调用该函数时输入参数的个数plhs在Matlab环境中调用该函数时要求返回参数的队列prhs在Matlab环境中调用该函数时输入参数的队列*/intmrows=0;intncols=0;doubledbX=0;doubledbY=0;double*pdbA=NULL;double*pdbG=NULL;/*Checkforpropernumberofarguments.检查输入、输出参数个数*///必须是2个输入参数//包括if(nrhs!=2){mexErrMsgTxt(Twoinputrequired.);}//必须是2个输出参数//包括if(nlhs!=2){mexErrMsgTxt(Twooutputrequired.);}/*Checkforpropertypeofarguments.检查输入、输出参数类型*/mrows=mxGetM(prhs[0]);ncols=mxGetN(prhs[0]);if(mxIsComplex(prhs[0])||!(mrows==1&&ncols==1)){mexErrMsgTxt(TheFirstinputmustbeanoncomplexscalardoubleprecision.);}mrows=mxGetM(prhs[1]);ncols=mxGetN(prhs[1]);if(mxIsComplex(prhs[1])||!(mrows==1&&ncols==1)){mexErrMsgTxt(Thefourthinputmustbeanoncomplexscalardoubleprecision.);}dbX=mxGetScalar(prhs[0]);dbY=mxGetScalar(prhs[1]);/*Creatematrixforthereturnargument.*/plhs[0]=mxCreateDoubleMatrix(mrows,ncols,mxREAL);plhs[1]=mxCreateDoubleMatrix(mrows,ncols,mxREAL);/*Assignpointerstoeachinputandoutput.*/pdbA=mxGetPr(plhs[0]);pdbG=mxGetPr(plhs[1]);Desc2Pol(dbX,dbY,pdbA,pdbG);}将MATLAB的工作目录切换至test.cpp所在目录,在MATLAB的命令窗口中,输入:mextest.cpp,若程序有错,会有提示,若无错,会在test.cpp的旁边生成test.mexw32文件,这个文件可以供MATLAB调用实现test.cpp中的C、C++函数的功能。在MATLAB中调用C、C++程序:将MATLAB的工作目录切换至上面已编译好的test.mexw32所在的目录,在MATLAB的命令窗口中输入:[ab]=test(1,1);即可实现调用C、C++程序。

1 / 3
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功