2011-12-17 4 views
0

에서 꿀꺽 꿀꺽 통해 C의 함수 포인터를 호출 : 기본적으로내가합니다 (가득하며 라이브러리에서)이 구조를 가지고 루아

struct NrrdEncoding { 
    // ... 
    int (*read)(FILE *file, void *data, size_t elementNum, 
       Nrrd *nrrd, struct NrrdIoState_t *nio); 
    int (*write)(FILE *file, const void *data, size_t elementNum, 
       const Nrrd *nrrd, struct NrrdIoState_t *nio); 
}; 

, 꿀꺽 꿀꺽가 readwrite는 유저 데이터가되고 싶어, 의미가있는가에 있다면 불투명하고 재 할당 가능해야한다. 그러나 나는 이것들을 재 할당 할 수 있기를 바라는 것 이상으로 호출 할 수 있기를 원하며 어떻게 해야할지 모른다. (이상적으로 나는 둘 다 할 수 있기를 바란다.)

답변

2

SWIG를 통해 객체에 NrrdEncoding 멤버 함수 (예 : 객체의 멤버로 바인딩하는 C 함수)를 제공해야한다. . object:read(...) : 당신이 NrrdEncoding 객체가있는 경우, 당신은이 같은 그것에 read를 호출 할 수 있습니다, 루아에서

struct NrrdEncoding 
{ 
    ... 
    //Don't expose the function pointers. The struct will still have them, but SWIG won't expose them. 
}; 

%extend NrrdEncoding 
{ 
    int read(FILE *file, void *data, size_t elementNum, Nrrd *nrrd, struct NrrdIoState_t *nio) 
    { 
    return $self->read(file, data, elementNum, nrrd, nio); 
    } 

    int write(FILE *file, const void *data, size_t elementNum, const Nrrd *nrrd, struct NrrdIoState_t *nio) 
    { 
    return $self->write(file, data, elementNum, nrrd, nio); 
    } 
} 

: 그것은는 다음과 같이 작동합니다.

+0

나는 그보다 더 간단 할 것이라고 기대했지만 오. 감사. – Reinderien

관련 문제