Estoy tratando de vincular mi código C con MATLAB mediante el uso de una función mex, y me temo que estoy bastante confundido. Específicamente, deseo saber si puedo usar mis propios tipos de datos definidos por el usuario (como Person struct en el ejemplo a continuación). No he encontrado nada en la documentación que sugiera que puedo, pero sería desafortunado si no se permitiera. Esto es lo que tengo en la forma de una función de puerta de enlace:Estructuras definidas por el usuario con una función MATLAB mex
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);
}
Mi función makePeople se define a continuación:
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;
}
Por último, aquí está el Person.h archivo:
#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
¡Cualquier ayuda sería muy apreciada!