www.pudn.com > matlab7.x.rar > tstfhdl.c


#include "mex.h" 
 
void mexFunction(int nlhs, mxArray *plhs[],  
    int nrhs, const mxArray *prhs[])  
{ 
    int i, j, m, n; 
    double *data1, *data2; 
     
	/* 输入变量为2,一个是函数句柄,另一个是参数*/ 
	if (nrhs != 2) 
		mexErrMsgTxt("The number of input must be two!"); 
 
	/*输出变量数目可以为0或者1*/ 
    if (nlhs > 1) 
        mexErrMsgTxt("The number of output must be zero or one!"); 
     
    /* 第一个输入必须是函数句柄 */ 
	if ( !mxIsClass(prhs[0], "function_handle") ) 
	{ 
		mxErrMsgTxt("The first input must be a function handle!"); 
	} 
     
    /* 得到输入矩阵的大小 */ 
    m = mxGetM(prhs[1]); 
    n = mxGetN(prhs[1]); 
  
    /* 创建输出变量所对应的mxArray */ 
    plhs[0] = mxCreateDoubleMatrix(m, n, mxREAL); 
 
	/* 使用函数句柄的第一种方法:调用mexEvalString */ 
	mxArray *funHandle = prhs[0]; 
	mxArray *xx = prhs[1]; 
	mexPutVariable("base", "xx", xx); 
	mexPutVariable("base", "funHandle", funHandle); 
	mexEvalString("yy = feval(funHandle, xx);"); 
	plhs[0] = mexGetVariable("base", "yy"); 
 
	/* 使用函数句柄的第二种方法:调用mexCallMATLAB */ 
	/* 
	mexCallMATLAB(1, &plhs[0], 2, prhs, "feval"); 
	*/ 
}