ArgumentError при передаче массива ctypes в функцию C - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь использовать функцию C copyDataContent, которая копирует данные с плавающей точкой из объекта структуры C, на который я указываю указателем DataHandle, в местоположение, заданное указателем с плавающей точкой.Я включил прототип функции для этой функции.Я могу получить размеры этих данных через другую функцию в библиотеке.Мой код ниже.

Прототип copyDataContent

void copyDataContent(DataHandle DataSource, float* Destination);

Здесь все идет не так:

data = createData()
size0 = getDataPropertyInt(data,0)
size1 = getDataPropertyInt(data,1)
arrC = C.POINTER(C.c_float*size0*size1)
libc.copyDataContent.argtypes = [DataHandle,C.POINTER(C.c_float)]
libc.copyDataContent(data,arrC)

Вывод на консоль:

ArgumentError: argument 2: <class 'TypeError'>: expected LP_c_float instance instead of _ctypes.PyCPointerType

^ из строки, где я на самом деле вызываю copyDataContent

Но вот что консоль говорит мне о arrC

arrC
Out[88]: __main__.LP_c_float_Array_0_Array_0

Может кто-нибудь пролить свет на то, чтоидет не так?документы ctypes не помогают

1 Ответ

0 голосов
/ 23 мая 2019

arrC = C.POINTER(C.c_float*size0*size1) создает тип , а не экземпляр.

Если вы хотите экземпляр массива, используйте arrC = (C.c_float*size0*size1)().

, чтобы передать его параметру float*, используйте libc.copyDataContent(data,cast(arrC,POINTER(c_float))).

...