ctypes: Zeiger auf Strukturen auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
tokstolle
User
Beiträge: 9
Registriert: Mittwoch 3. Dezember 2008, 21:39

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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.
tokstolle
User
Beiträge: 9
Registriert: Mittwoch 3. Dezember 2008, 21:39

Ja, das sieht jetzt gut aus. :)

Vielen Dank

Gruss Tokstolle
Antworten