将 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)))
。
我正在尝试使用 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)))
。