用c编写mex程序[三]
通过前面两部分的介绍,大家对参数的输入和输出方法应该有了基本的了解。具备了这 些知识,就能够满足一般的编程需要了。但这些程序还有些小的缺陷,以前面介绍的re 由于 前面的例程中没有对输入、输出参数的数目及类型进行检查,导致程序的容错性很 #include "mex.h" void mexFunction(int nlhs, mxArray *plhs[], 讨论区 [Matlab] int nrhs, const mxArray *prhs[]) { double *inData; double *outData; int M,N; //异 常处理 //异常处理 if(nrhs!=1) mexErrMsgTxt("USAGE: b=reverse(a)\n"); if(!mxIsDouble(prhs[0])) mexErrMsgTxt("the Input Matrix must be double!\n"); inData=mxGetPr(prhs[0]); M=m xGetM(prhs[0]); N=mxGetN(prhs[0]); void mexFunction(int nlhs, mxArray *plhs[], plhs[0]=mxCreateDoubleMatrix(M ,N,mxREAL); outData=mxGetPr(plhs[0]); for(i=0;iM;i++) for(j=0;j 在上面的异常处理中,使用了两个新的函数:mexErrMsgTxt和mxIsDouble。MexErrMs gT xt在给出出错提示的同时退出当前程序的运行。MxIsDouble则用于判断mxArray中的数据 是否double类型。当然Matlab还提供了许多用于判断其他数据类型的函数,这里不加详 述。 需要说明的是,Matlab提供的API中,函数前缀有mex-和mx-两种。带mx-前缀的大多是对 mx Array数据进行操作的函数,如mxIsDouble,mxCreateDoubleMatrix等等。而带mx前缀 的则大 多是与Matlab环境进行交互的函数,如mexPrintf,mxErrMsgTxt等等。了解了这 一点,对在 Apiref.pdf中查找所需的函数很有帮助。 至此为止,使用C编写mex函数的基本过程已经介绍 完了。下面会在介绍几个非常有用的 函数调用。如果有足够的时间,也许还会有一个更复杂 一些的例程。 |
GMT+8, 2025-4-11 21:45 , Processed in 0.054960 second(s), 23 queries , Gzip On.
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.