提示用户在 MEX 代码中输入数字

Prompting user to enter number in MEX code

我想知道是否有提示用户在 MEX 代码中输入整数。

类似于 MATLAB 中的输入或 C 中的 scanf

我听说过 mexCallMATLAB 及其在

中的使用
 str = mxCreateString("Enter extension:  ");

   mexCallMATLAB(1,&new_number,1,&str,"input");

但是我不太明白 mxCreateString 的意义是什么以及 &str 是做什么的。如果有人能详细说明一下或给我另一种提示用户输入数据的技巧,我将不胜感激。

让我们从头说起。 mexCallMATLAB 在 MEX 代码中调用 MATLAB 函数、用户定义的 MATLAB 函数或 MEX 文件。函数声明是这样的:

int mexCallMATLAB(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[], 
                  const char *functionName);

详细参数为:

  1. nlhs: MATLAB 或 MEX 函数预期产生的输出参数总数。
  2. *plhs[]:指针数组,其中每个元素都是指向输出参数的指针
  3. nrhs:MATLAB或MEX函数期望传入的输入参数总数。
  4. *prhs[]:指针数组,其中每个元素都是指向输入参数的指针。
  5. functionName:包含函数名的C字符串。

注意 *plhs[]*prhs[] 必须是指向 MEX 类型变量的指针数组。这很重要,因为这将用于了解接下来会发生什么。使用上面的逻辑,看看你引用的 mexCallMATLAB 的调用:

mexCallMATLAB(1,&new_number,1,&str,"input");

我们可以看到,在MATLAB中调用的函数是input函数,它是一个MATLAB函数,其中输入参数是用于在命令Window中显示的字符串提示符在接收用户输入并将其存储到输出变量之前。请注意,预期的是数值表达式,通常是数字或对数字的一些操作。

示例调用如下所示:

out = input('Enter a number: ');

Enter a number: 将因此显示在命令 Window 中,并且您输入的任何数字都会存储到变量 out.

当使用 mexCallMATLAB 时,您正在执行与上述相同的操作,但在 MEX 代码中调用它。此函数有一个输入参数和一个预期的输出参数。第二个参数在技术上是一个指向输出参数的指针,它是一个只有一个元素的数组。 input 的输出将因此存储在变量 new_number 中,该变量将包含一个数字。 str 变量是使用 mxCreateString 创建的 MEX 字符串。您必须 创建一个 MEX 字符串,因为请记住,要通过 mexCallMATLAB 调用的函数的输入变量的预期输入必须是 MEX 变量。因此,str 是 MEX 字符串,而 &str 是指向 MEX 字符串的指针。从技术上讲,这也是一个包含一个元素的指针数组。

调用此函数后,您将输入数字输入 MATLAB 命令 Window,因此数字将发送回 MEX 并存储到 MEX 代码中的 new_number


这似乎是一种从 MATLAB 命令 Window 将变量获取到 MEX 的优雅方法。在我的 MEX 经验中,我没有遇到任何其他方法,所以请继续使用它!