📄 c编写mex程序5.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0113)http://bbs.sjtu.edu.cn/cgi-bin/bbsanc?path=/groups/GROUP_4/MathTools/DA6B7A1FF/D9BB618C8/D47AB10D3/M.1025941432.A -->
<HTML><HEAD><TITLE>SJTUBBS精华区文章</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type><LINK
href="c编写mex程序5.files/bbstyle.css" rel=stylesheet type=text/css>
<META content="MSHTML 5.00.3315.2870" name=GENERATOR></HEAD>
<BODY>
<CENTER>
<TABLE class=title width="90%">
<TBODY>
<TR>
<TH align=left class=title width="33%">文章阅读</TH>
<TH align=middle class=title width="33%">饮水思源</TH>
<TH align=right class=title width="34%">精华区</TH></TR></TBODY></TABLE>
<HR>
<TABLE class=doc>
<TBODY>
<TR>
<TD class=doc><PRE>发信人: GzLi (苍鹰-文子), 信区: MathTools
标 题: c编写mex程序<5> (zz)
发信站: 饮水思源 (2002年07月06日15:43:53 星期六), 站内信件
发信人: 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]
--
她总是警告我说:如果你不学习,你将什么都不是。绝对什么都不是。
学习没有任何捷径可言。不要欺骗你自己。
welcome to <B><FONT class=col31>Matlab</FONT></B> http://bbs.sjtu.edu.cn/cgi-bin/bbsdoc?board=Matlab
welcome to <B><FONT class=col32>DataMining</FONT></B> http://DataMining.bbs.lilybbs.net
<B><FONT class=col36>※ 修改:·GzLi 於 07月06日15:45:21 修改本文·[FROM: 211.80.38.29]</FONT></B>
<FONT class=col31>※ 来源:·饮水思源 bbs.sjtu.edu.cn·[FROM: 211.80.38.29] </FONT>
</PRE></TR></TBODY></TABLE>
<HR>
<TABLE class=foot>
<TBODY>
<TR>
<TH class=foot><A href="http://bbs.sjtu.edu.cn/">返回首页</A></TH>
<TH class=foot><A
href="http://bbs.sjtu.edu.cn/cgi-bin/bbssec">分类讨论区</A></TH>
<TH class=foot><A
href="http://bbs.sjtu.edu.cn/cgi-bin/bbsall">全部讨论区</A></TH></TR></TBODY></TABLE></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -