在此示例中,我们将编写一个基本程序,该程序检查传递给MEX函数的输入和输出的数量。
首先,我们需要创建一个实现“ MEX网关”的C ++文件。这是从MATLAB调用文件时执行的函数。
// MathWorks提供的头文件 #include "mex.h" // 网关功能 void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { // 如果输入数量不是3或4,则此功能将出错 // 如果输出数量大于1,此功能将出错 // 检查输入: if (nrhs < 3 || nrhs > 4) { mexErrMsgIdAndTxt("Testinputs:ErrorIdIn", "MEX文件的输入数量无效。"); } // 检查输出: if (nlhs > 1) { mexErrMsgIdAndTxt("Testinputs:ErrorIdOut", "MEX文件的输出数量无效。"); } }
首先,我们包含mex.h标题,该标题包含与MEX API一起使用的所有必需函数和数据类型的定义。然后,我们实现mexFunction如图所示的功能,其中其签名不得更改,而与实际使用的输入/输出无关。功能参数如下:
nlhs:请求的输出数量。
*plhs[]:包含MEX API格式的所有输出的数组。
nrhs:传递的输入数。
*prhs[]:包含MEX API格式的所有输入的数组。
接下来,我们检查输入/输出参数的数量,如果验证失败,则使用mexErrMsgIdAndTxt函数抛出错误(期望使用somename:iD格式标识符,简单的“ ID”将不起作用)。
将文件编译为后mex testinputs.cpp,可以在MATLAB中将函数调用为:
>> testinputs(2,3) Error using testinputs. MEX文件的输入数量无效。 >> testinputs(2,3,5) >> [~,~] = testinputs(2,3,3) Error using testinputs. MEX文件的输出数量无效。