让我们从头开始。 mexCallMATLAB
在MEX代码中调用MATLAB函数,用户定义的MATLAB函数或MEX文件。函数声明是这样的:
int mexCallMATLAB(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[],
const char *functionName);
详细的参数是:
nlhs
:该MATLAB或MEX功能预计将产生输出参数的总数。
*plhs[]
:指针数组,其中每个元素是一个指向一个输出参数
nrhs
:总数的是,MATLAB或MEX功能预计需要在输入参数
*prhs[]
:数组每个元素是指向输入参数的指针的指针。
functionName
:包含函数名称的C字符串。
注意到,*plhs[]
和*prhs[]
必须是一个指针数组来MEX型变量。这很重要,因为这将用于了解接下来会发生什么。使用上面的逻辑,看看调用mexCallMATLAB
您已经引用:
mexCallMATLAB(1,&new_number,1,&str,"input");
正如我们所看到的,在MATLAB中调用该函数是input
函数,它是一个MATLAB函数,其中输入参数是在从用户接收输入并将其存储到输出变量中之前,用于在命令窗口中显示的字符串提示。请注意,预期的是数字表达式,通常是数字或数字的一些操作。
的示例调用看起来就像这样:
out = input('Enter a number: ');
Enter a number:
因而将显示在命令窗口和任何号码,你键入被存储到变量out
。
当使用mexCallMATLAB
时,您正在做与上述操作相同的操作,但在MEX代码中调用此操作。这个函数有一个输入参数,并且有一个输出参数是预期的。第二个参数在技术上是一个指向输出参数的指针,其中这将只是一个元素的数组。因此,input
的输出将存储在将包含数字的变量new_number
中。str
变量是使用mxCreateString
创建的MEX字符串。您必须创建一个MEX字符串,因为请记住,通过mexCallMATLAB
调用的函数的输入变量的预期输入必须是MEX变量。因此,str
是一个MEX字符串,而&str
将是一个指向MEX字符串的指针。这在技术上也是一个元素的指针数组。
一旦调用了这个函数,你就在MATLAB命令窗口中输入一个输入号码,这样号码就被发送回MEX并存储到你的MEX代码中的new_number
中。
这似乎是从MATLAB命令窗口获取变量到MEX的一种优雅方式。我没有遇到任何我在MEX经历中看到的其他方法,所以请继续使用它!