檢查 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.