2012-01-15 2 views
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 

도움을 주시면 대단히 감사하겠습니다!

답변

6

MEX에서 MATLAB 구조체는 mxArray 유형이며 사용자 정의 C 구조체 Person과 다릅니다. 따라서 당신은 지정하지 못할 :

people[count] = oPerson; 

// people is defined as: mxArray* 
// oPerson is defined as: Person 

당신은 MATLAB 구조체 필드 단위, 당신은 당신의 코드 시작 부분에서와 같은 방법으로, 기입해야합니다 mxSetField

을 통해
관련 문제