检查 C MEX 文件中的输入输出数

在这个例子中,我们将编写一个基本程序来检查传递给 MEX 函数的输入和输出的数量。

作为起点,我们需要创建一个实现“MEX 网关”的 C++文件。这是从 MATLAB 调用文件时执行的函数。

testinputs.cpp

// MathWorks provided header file
#include "mex.h"

// gateway function
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    // This function will error if number of inputs its not 3 or 4
    // This function will error if number of outputs is more than 1

    // Check inputs:
    if (nrhs < 3 || nrhs > 4) {
        mexErrMsgIdAndTxt("Testinputs:ErrorIdIn",
            "Invalid number of inputs to MEX file.");
    }

    // Check outputs:
    if (nlhs > 1) {
        mexErrMsgIdAndTxt("Testinputs:ErrorIdOut",
                "Invalid number of outputs to MEX file.");
    }
}

首先,我们包含 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. Invalid number of inputs to MEX file.

>> testinputs(2,3,5)

>> [~,~] = testinputs(2,3,3)
Error using testinputs. Invalid number of outputs to MEX file.