У меня есть DLL, содержащая функцию C с прототипом, подобным этому:
int c_read_block(uint32 addr, uint32 *buf, uint32 num);
Я хочу вызвать его из Python, используя ctypes. Функция ожидает указатель на кусок памяти, в который она будет записывать результаты. Я не знаю, как построить и передать такой кусок памяти. Документация ctypes не сильно помогает.
Создание массива и передача его "byref", например:
cresult = (c_ulong * num)()
err = self.c_read_block(addr, byref(cresult), num)
Дает это сообщение об ошибке:
ArgumentError: argument 3: <type 'exceptions.TypeError'>: expected LP_c_ulong instance instead of pointer to c_ulong_Array_2
Полагаю, это потому, что массив Python ulong не похож на массив c uint32. Должен ли я использовать create_char_string
. Если да, то как мне убедить Python «привести» этот буфер к LP_c_ulong?