将 ctypes 数组传递给 C 函数时出现 ArgumentError

ArgumentError when passing ctypes array to C function

我正在尝试使用 C 函数 copyDataContent 将浮点数据从我用指针 DataHandle 指向的 C 结构对象复制到浮点指针给定的位置。我已经包含了这个函数的函数原型。我可以通过库中的另一个函数获取这些数据的维度。我的代码如下。

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 文档没有帮助

arrC = C.POINTER(C.c_float*size0*size1) 创建 type 而不是实例。

如果你想要一个数组的实例,使用arrC = (C.c_float*size0*size1)()

要将其传递给 float* 参数,请使用 libc.copyDataContent(data,cast(arrC,POINTER(c_float)))