⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mathtools596.txt

📁 C++ interface
💻 TXT
字号:
发信人: FangQ (木头虫子), 信区: MathTools 
标  题: Matlab与C++接口与混合编程讨论小结(七) 
发信站: BBS 水木清华站 (Tue Nov  2 22:28:22 1999) 
  
  
第二章、 
第五节、用c编写mex程序[五] 
发信人: fasiondog (乱了), 信区: MathTools 
标  题: 用c编写mex程序  (part 5) 
发信站: 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; 
 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(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函数的基本过程已经介绍完了。下面会在介绍几个非常有用的 
  
函数调用。如果有足够的时间,也许还会有一个更复杂一些的例程。 
-- 
  
      这   是   最   后   的   斗   争 
      THIS   IS   THE  FINAL  CONFLICT 
  
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.115.15.64] 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -