5
我想通过使用mex函数将我的C代码链接到MATLAB,恐怕我很困惑。具体来说,我想知道我是否可以使用自己的用户定义的数据类型(例如下面示例中的Person结构)。我没有在文档中找到任何证据表明我能做到,但如果不允许这样做会很不幸!下面是我在一个网关功能的方法:用户定义的结构与MATLAB mex功能
void makePeople(int* A, int* B, Person* people)
{
int MANHATTAN, BRONX, BROOKLYN, QUEENS, STATEN;
int i, j, k, p, q, n;
int count, home, work, mode;
double* loc1;
double* loc2;
Person oPerson;
n = 5;
count = 0;
MANHATTAN = 1;
BRONX = 2;
BROOKLYN = 3;
QUEENS = 4;
STATEN = 5;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
for (k = 1; k <= 2; k++)
{
if (k == 1)
q = A[n*i+j];
else
q = B[n*i+j];
for (p = 1; p < q; p++)
{
home = i;
work = j;
mode = k;
if (home == MANHATTAN)
{
loc1[0] = 2.4;
loc1[1] = 2.4;
loc2[0] = 3.7;
loc2[1] = 3.4;
}
else
{
loc1[0] = 3.4;
loc1[1] = 4.4;
loc2[0] = 3.7;
loc2[1] = 3.4;
}
oPerson = Person_new(home, work, mode, loc1, loc2);
people[count] = oPerson;
count++;
}
}
}
}
return;
}
最后,这里的person.h:}
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
int *inA;
int *inB;
const mxArray *people;
const char *fieldnames[5];
int numFields, i;
inA = (int *) mxGetPr(prhs[0]);
inB = (int *) mxGetPr(prhs[1]);
numFields = 5;
fieldnames[0] = "home";
fieldnames[1] = "work";
fieldnames[2] = "mode";
fieldnames[3] = "loc1";
fieldnames[4] = "loc2";
people = mxCreateStructMatrix(1000, 1, numFields, fieldnames);
for (i = 0; i < numFields; i++)
{
mxSetField(people,i,fieldnames[i],mxDuplicateArray(prhs[2]));
}
makePeople(inA, inB, people);
我makePeople函数的定义如下文件:
#ifndef PERSON_INCLUDED
#define PERSON_INCLUDED
typedef struct Person_str *Person;
Person Person_new(int home, int work, int mode, double* loc1, double* loc2);
#endif
任何帮助将不胜感激!