2016-07-18 3 views
1

Im new, использующий SWIG для обертывания C общей библиотеки.Функция SWIG с указателем struct

У меня проблема с вызовом функции C с указателем Struct в python.

Мои файлы:

ST_Param.h:

typedef struct { 
     unsigned int* device_Address; 
     .... 
     .... 
     unsigned int lock; 
}ST_param_ST;  


unsigned char ST_Param_Initialize(ST_param_ST * ST_param, unsigned int device_Address); 

ST_Param.c

......... Rest of file............. 

unsigned char ST_Param_Initialize(ST_param_ST * ST_param, unsigned int device_Address){ 

    if(ST_param == NULL){ 
    .......... rest of funtion ....................... 

    return 0; 
} 

В ST_Param_Initialize Я подтверждаю, что указатель существует, если не верите

ST_Param.i:

/* File : ST_Param.i */ 
%module ST_Param 

%{ 
#define SWIG_FILE_WITH_INIT 
#include "ST_Param.h" 
%} 




%include "typemaps.i" 
%include "ST_Param.h" 

Я компилируется и создается файл .so хорошо. В питоне я могу импортировать библиотеку, но я не могу назвать ST_Param_Initialize потому нуждающимся ST_Param_ST * параметр:

ST_param_ST * error

Как я могу это сделать?

Примечание: я не могу изменить файлы .c и .h. Только файл .i.

Поиск в Google, но я не понимаю, как это сделать

Благодаря уважением.

ответ

2

Вы делаете это по существу так же, как и в C: сначала создаете структуру ST_param_ST, а затем передаете ее функции инициализации ST_Param_Initialize(). Вот пример в Python, если ваш модуль называется ex:

>>> import ex 
>>> ST_Param = ex.ST_param_ST() 
>>> ex.ST_Param_Initialize(ST_param, 42)