通过字段名称传递结构
此示例说明如何从 MATLAB 读取各种类型的结构条目,并将其传递给 C 等效类型变量。
虽然从示例中可以很容易地找出如何通过数字加载字段,但是这里通过将字段名称与字符串进行比较来实现。因此,struct 字段可以通过它们的字段名来寻址,其中的变量可以由 C 读取。
structIn.c
#include "mex.h"
#include <string.h> // strcmp
void mexFunction (int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
// helpers
double* double_ptr;
unsigned int i; // loop variable
// to be read variables
bool optimal;
int randomseed;
unsigned int desiredNodes;
if (!mxIsStruct(prhs[0])) {
mexErrMsgTxt("First argument has to be a parameter struct!");
}
for (i=0; i<mxGetNumberOfFields(prhs[0]); i++) {
if (0==strcmp(mxGetFieldNameByNumber(prhs[0],i),"randomseed")) {
mxArray *p = mxGetFieldByNumber(prhs[0],0,i);
randomseed = *mxGetPr(p);
}
if (0==strcmp(mxGetFieldNameByNumber(prhs[0],i),"optimal")) {
mxArray *p = mxGetFieldByNumber(prhs[0],0,i);
optimal = (bool)*mxGetPr(p);
}
if (0==strcmp(mxGetFieldNameByNumber(prhs[0],i),"numNodes")) {
mxArray *p = mxGetFieldByNumber(prhs[0],0,i);
desiredNodes = *mxGetPr(p);
}
}
}
i
上的循环遍历给定结构中的每个字段,而 if(0==strcmp)
-parts 将 matlab 字段的名称与给定字符串进行比较。如果匹配,则将相应的值提取到 C 变量。