Seite 1 von 1

ctypes: Zeiger auf Strukturen auslesen

Verfasst: Mittwoch 25. Februar 2009, 14:56
von tokstolle
Hallo zusammen,
ich habe folgendes Problem. Ich habe in C eine Funktion definiert, welche einen Zeiger auf eine Struktur entgegen nimmt.
initStack(struct parameter* myparam){...}

die Struktur hat in etwa diese Form (stark vereinfacht)
struct parameter
{
int lenght;
int socket;
char* buffer;
bool raw_sock;
struct ip_addr* local_addr;
}

dann in Python umgesetzt:

Code: Alles auswählen

class PARAMETER(Structure):
    _fields_ = [("length",         c_int),
                      ("socket",        c_int),
                      ("buffer",          c_char_p),
                      ("raw_sock",   c_bool),
                      ("local_addr", POINTER(IP_ADDR))]
IP_ADDR hatte ich vorher deklariert, spielt hier jetzt keine Rolle.

Ich erstelle dann eine Instanz und dann einen Zeiger auf diese Instanz

Code: Alles auswählen

myParameter = mylib.PARAMETER()
pParameter = ctypes.pointer(myParameter)
Wenn ich jetzt aber versuche nach Beendigung der Funktion die Werte auszulesen bekomme ich folgende Meldung:

AttributeError: 'LP_PARAMETER' object has no attribute 'length'


Was mache ich falsch?

Vielen Dank vorab.

Gruss Tokstolle

Verfasst: Mittwoch 25. Februar 2009, 16:06
von HWK
Du greifst offensichtlich auf den Pointer der Struktur zu und nicht auf ihren Inhalt. Du musst z.B. pParameter.contents.length verwenden.
MfG
HWK

P.S.: Die Namengebung ist nicht sonderlich Python-like.

Verfasst: Mittwoch 25. Februar 2009, 23:18
von tokstolle
Ja, das sieht jetzt gut aus. :)

Vielen Dank

Gruss Tokstolle