Math 版 (精华区)

发信人: ysc (bajie), 信区: Math
标  题: 用c编写mex程序  (part 5) 
发信站: 哈工大紫丁香 (Sun Oct 22 09:01:37 2000), 转信

发信人: fasiondog (乱了), 信区: MathTools       
发信站: BBS 水木清华站 (Mon Apr  5 12:52:13 1999)

发信人: dodoo (虚怀), 信区: Programming
标  题: 用C编写mex程序  [PART 5]
通过前面两部分的介绍,大家对参数的输入和输出方法应该有了基本的了解。具备了这
些知识,就能够满足一般的编程需要了。但这些程序还有些小的缺陷,以前面介绍的re
由于前面的例程中没有对输入、输出参数的数目及类型进行检查,导致程序的容错性很
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[],
     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=mxGetM(prhs[0]);

 N=mxGetN(prhs[0]);


 plhs[0]=mxCreateDoubleMatrix(M,N,mxREAL);

 outData=mxGetPr(plhs[0]);


 for(i=0;i<M;i++)

  for(j=0;j<N;j++)

   outData[j*M+i]=inData[(N-1-j)*M+i];

}


在上面的异常处理中,使用了两个新的函数:mexErrMsgTxt和mxIsDouble。MexErrMsgT

xt在给出出错提示的同时退出当前程序的运行。MxIsDouble则用于判断mxArray中的数据

是否double类型。当然Matlab还提供了许多用于判断其他数据类型的函数,这里不加详

述。


需要说明的是,Matlab提供的API中,函数前缀有mex-和mx-两种。带mx-前缀的大多是对

mxArray数据进行操作的函数,如mxIsDouble,mxCreateDoubleMatrix等等。而带mx前缀

的则大多是与Matlab环境进行交互的函数,如mexPrintf,mxErrMsgTxt等等。了解了这

一点,对在Apiref.pdf中查找所需的函数很有帮助。


至此为止,使用C编写mex函数的基本过程已经介绍完了。下面会在介绍几个非常有用的

函数调用。如果有足够的时间,也许还会有一个更复杂一些的例程。


--

“恒山掌门定闲师太慈祥平和,泰山掌门天门道长威严厚重,嵩山掌门左冷禅

阴鸷险刻,我恩师是位彬彬君子,这位莫师伯外表猥琐平庸,似是个市井小人。

但五岳派的五位掌门人,其实个个是十分深沉多智之人。我令狐冲草包一个,

可和他们差得远了。”


※ 来源: 心网 cag.seu.edu.cn [FROM: 202.119.30.69]

--

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: ysc.bbs@smth.org]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:5.275毫秒