Я обращаюсь к API и не могу получить возвращенные данные. Два указателя с плавающей точкой будут указывать на массив данных. Я должен предположить, что API работает правильно. Другой вызов функции обеспечивает длину данных, которые я получаю. Это значение length
ниже при попытке.
C Заголовок для функции
int function(int, float * data1, float * data2)
ctypes setup
dll.function.argtypes = (c_int, POINTER(c_float), POINTER(c_float))
dll.function.restypes = c_int
Неудачная попытка 1:
x = c_float()
y = c_float()
status = dll.function(1, byref(x), byref(y))
Сбой программы ИЛИ запись нарушения прав доступа.
Неудачная попытка 2:
x = POINTER(c_float)()
y = POINTER(c_float)()
status = dll.function(1, x, y)
Ошибка нулевого указателя
Неудачная попытка 3:
dll.function.argtypes = (c_int, c_void_p, c_void_p)
x = c_void_p()
y = c_void_p()
status = dll.function(1, x, y)
Ошибка нулевого указателя
Неудачная попытка 4:
array = c_float * length
x = array()
y = array()
status = dll.function(1, byref(x), byref(y))
Сбой программы
Неудачная попытка 5:
array = c_float * length
x = POINTER(array)()
y = POINTER(array)()
status = dll.function(1, x, y)
Ошибка нулевого указателя ИЛИ ArgumentError: ожидаемый экземпляр LP_c_float вместо LP_c_float_Array_ [length]
Неудачная попытка 6:
x = (c_float*length)()
y = (c_float*length)()
a = cast(x, POINTER(c_float))
b = cast(y, POINTER(c_float))
status = dll.function(1, a, b)
Сбой программы
Чего мне не хватает и почему?
Я верю, что аргументы правильны. Я пытаюсь встретиться с ними должным образом, но проблемы остаются. Нужно ли как-то "распределять" память? (Я уверен, что мне нужно освободиться после того, как я получу данные).
Это в Windows 7 с 32-битным Python 2.7.
Я просмотрел другие подобные проблемы и не нашел решения. Мне интересно, могу ли я на данный момент винить API в этой проблеме.