我有一个C函数,在第三个输入pos中使用const双指针:
PI_MOV(int ID, const char* szAxes, const double* pdValueArray)
当我尝试使用双指针时:
pos = C.POINTER(C.c_double)
pos.value = 2.0
GCS_api.PI_MOV(controller_number, szAxis1, pos)
我收到位置3的参数类型错误:
ctypes.ArgumentError: argument 3: <type 'exceptions.TypeError'>: Don't know how to convert parameter 3
如何将pos(第三个参数)转换为所需的常量双指针?实际上,此函数在C ++ Visual Studio中可以用作普通的double型,因此不清楚为什么需要为const double *。有什么建议?
我试图为函数指定参数类型:
GCS_api.PI_MOV.argtypes = [C.c_int, C.POINTER(C.c_char), C.POINTER(C.c_double)]
但这也给出了一个错误:
ctypes.ArgumentError: argument 3: <type 'exceptions.TypeError'>: expected LP_c_double instance instead of _ctypes.PyCPointerType
如果我坚持使用原始格式并传递一个ctypes double * constant,我想我会没事的...。
pos = C.POINTER(C.c_double)
创建一个类型。您需要a的实例,c_double
并将地址传递给函数:
d = C.c_double(2.0)
GCS_api.PI_MOV(controller_number, szAxis1, C.byref(d))
由于该函数可能需要一个双精度数组,因此语法如下:
d = (C.c_double*4)(1.1,2.2,3.3,4.4) # Create double[4] array
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句