2016-07-18 25 views
1

Ich bin neu mit SWIG, um C-shared Bibliothek umwickelt.SWIG-Funktion mit Zeiger-Struktur

Ich habe Probleme, eine C-Funktion mit Struct Zeiger in Python aufzurufen.

Meine Dateien:

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; 
} 

Innerhalb ST_Param_Initialize bestätige ich, dass der Zeiger vorhanden ist, wenn nicht

glauben

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" 

ich zusammengestellt und eine .so-Datei gut generiert. In Python kann ich eine Bibliothek importieren, aber ich kann nicht ein ST_Param_Initialize, weil ein Bedarf, ein ST_Param_ST * Parameter nennen:

ST_param_ST * error

Wie kann ich das tun?

Hinweis: Ich kann eine .c und .h Datei nicht ändern. Nur eine .i-Datei.

Eine Suche in Google, aber ich verstehe nicht, wie es

Dank tun Grüße.

Antwort

2

Sie tun dies im Wesentlichen auf die gleiche Weise, wie Sie es in C tun: Erstellen Sie zunächst eine ST_param_ST Struktur und übergeben Sie diese dann an die Initialisierungsfunktion ST_Param_Initialize(). Hier ist ein Beispiel in Python, vorausgesetzt, Ihr Modul heißt ex:

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