Zeiger und Arrays in Python-C-Typen

Ich habe eine DLL mit einer C-Funktion mit einem Prototyp wie folgt:

int c_read_block(uint32 addr, uint32 *buf, uint32 num);

Ich möchte es von Python mit ctypes aufrufen. Die Funktion erwartet einen Zeiger auf einen Speicherbereich, in den die Ergebnisse geschrieben werden. Ich weiß nicht, wie ich so ein Gedächtnisstück konstruieren und weitergeben soll. Die ctypes-Dokumentation ist keine große Hilfe.

So konstruieren Sie ein Array und übergeben es "byref":

    cresult = (c_ulong * num)()
    err = self.c_read_block(addr, byref(cresult), num)

Gibt diese Fehlermeldung aus:

ArgumentError: argument 3: <type 'exceptions.TypeError'>: expected LP_c_ulong instance instead of pointer to c_ulong_Array_2

Ich vermute, das liegt daran, dass das Python ulong-Array nichts mit einem c uint32-Array zu tun hat. Sollte ich es benutzencreate_char_string. Wenn ja, wie kann ich Python davon überzeugen, diesen Puffer in eine LP_c_ulong "umzuwandeln"?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage