ctype Linux так что библиотека Pointer TypeError - PullRequest
1 голос
/ 08 марта 2019

Я загружаю библиотеку C (.so файл) с ctypes. Затем я устанавливаю аргументы и вызываю одну функцию и получаю ошибку ниже;

ctypes.ArgumentError: argument 4: <class 'TypeError'>: expected LP_c_ushort instance instead of _ctypes.PyCSimpleType

Как я полагаю, это связано с определением POINTER в конце 3-й строки. Вы можете помочь?

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))

1 Ответ

1 голос
/ 08 марта 2019

(1) h должен получить экземпляр типа c_ushort, поэтому:

h = ctypes.c_ushort()

(2) Предполагая, что указатель на h используется только во время вызова функции и не должен храниться дольше, используйте

ret = mylib.cnc_allclibhndl3('192.168.1.1',9000,1,ctypes.byref(h))
...