Wskaźniki i tablice w typach Pythona
Mam bibliotekę DLL zawierającą funkcję C z takim prototypem:
int c_read_block(uint32 addr, uint32 *buf, uint32 num);
Chcę to nazwać z Pythona przy użyciu ctypów. Funkcja oczekuje wskaźnika do fragmentu pamięci, w którym zapisze wyniki. Nie wiem, jak skonstruować i przekazać taki kawałek pamięci. Dokumentacja ctypes niewiele pomaga.
Konstruowanie tablicy i przekazywanie jej „byref”, w ten sposób:
cresult = (c_ulong * num)() err = self.c_read_block(addr, byref(cresult), num)
Podaje ten komunikat o błędzie:
ArgumentError: argument 3: <type 'exceptions.TypeError'>: expected LP_c_ulong instance instead of pointer to c_ulong_Array_2
Domyślam się, że to dlatego, że tablica ulong Pythona nie jest niczym tablica c uint32. Powinienem użyćcreate_char_string
. Jeśli tak, jak przekonać Pythona, aby „rzucił” ten bufor na LP_c_ulong?