06.08.2013 Views

内容简介作者简介 - 科学与工程计算系

内容简介作者简介 - 科学与工程计算系

内容简介作者简介 - 科学与工程计算系

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

12.1.3 C 语言 MEX 文件源程序的构成<br />

【例 12.1.3-1】列出具有相同运算功能(实现两个双精度实数标量加法)的 C++源码程序<br />

和 C++ MEX 源码程序;对 C++ MEX 源码程序进行编译链接;在 MATLAB 中调用生成的<br />

DLL 文件。通过本例,从感性上认识:(A)一般 C 源码文件如何改写成具有约定格式的<br />

C MEX 源码文件;(B)C MEX 源码文件的基本结构;(C)基本的编译链接方法;<br />

(D)DLL 文件的调用方法。<br />

(1)<br />

#include <br />

void myplus(double y[],double x[],double z[])<br />

{<br />

y[0]=x[0]+z[0];<br />

return;<br />

}<br />

(2)<br />

[exm12013_1.cpp]<br />

#include "mex.h" // <br />

//------------------------------------------------void<br />

myplus(double y[],double x[],double z[])<br />

{<br />

y[0]=x[0]+z[0];<br />

}<br />

//------------------------------------------------void<br />

mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])<br />

{<br />

//<br />

double *x,*y,*z; //<br />

int mrows0,ncols0; //<br />

int mrows1,ncols1; //<br />

if (nrhs!=2) //<br />

mexErrMsgTxt("Two inputs required."); //<br />

else if (nlhs>1) //<br />

mexErrMsgTxt("Too many output arguments"); //<br />

mrows0=mxGetM(prhs[0]);<br />

ncols0=mxGetN(prhs[0]);<br />

mrows1=mxGetM(prhs[1]);<br />

//<br />

ncols1=mxGetN(prhs[1]); //<br />

//<br />

if (!mxIsDouble(prhs[0])||mxIsComplex(prhs[0])||!(mrows0==1 && ncols0==1)) //<br />

mexErrMsgTxt("Inputs must be all noncomplex scalar double.");<br />

2

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!