我正在使用.so
加载C库(ctypes
文件)。然后我设置参数并调用一个函数,并得到以下错误;
ctypes.ArgumentError: argument 4: <class 'TypeError'>: expected LP_c_ushort instance instead of _ctypes.PyCSimpleType
我猜想这与第三行末尾的POINTER定义有关。你能帮忙吗?
import ctypes
mylib = ctypes.cdll.LoadLibrary('./libfocas32.so')
mylib.cnc_allclibhndl3.argtypes = ctypes.c_wchar_p, ctypes.c_ushort, ctypes.c_long, ctypes.POINTER(ctypes.c_ushort)
mylib.cnc_allclibhndl3.restype = ctypes.c_long
h = ctypes.c_ushort
ret = mylib.cnc_allclibhndl3('192.168.1.1',9000,1,(h))
答案 0 :(得分:1)
(1)h
必须接收类型为c_ushort
的实例,因此:
h = ctypes.c_ushort()
(2)假设仅在函数调用期间使用指向h
的指针,并且不应将其存储更长的时间,请使用
ret = mylib.cnc_allclibhndl3('192.168.1.1',9000,1,ctypes.byref(h))