Импортировал ctypes, подключился к dll. Есть например такая функция:
function GetStatusCardReader(var StatusCardReader: Word): Integer; stdcall;
Пробую делать так:
from ctypes import *
libc = windll.LoadLibrary('C:\test.dll')
func = libc.GetStatusCardReader
func.restype = c_short
print(func)
Получаю на выходе <_FuncPtr object at 0x057ABA08>
Как получить значение?
Ответ
Чтобы получить значение, функцию надо вызвать.
import ctypes
_dll = ctypes.windll.test # загрузка test.dll из текущего каталога
GetStatusCardReader = _dll.GetStatusCardReader
GetStatusCardReader.argtype = ctypes.POINTER(ctypes.c_uint16)
GetStatusCardReader.restype = ctypes.c_int32
StatusCardReader = ctypes.c_uint16(5) # инициализация параметра некоторым значением
Result = GetStatusCardReader(ctypes.byref(StatusCardReader)) # вызов функции
print(StatusCardReader.value)
print(Result)
Поскольку StatusCardReader в прототипе функции объявлена как var, передавать её надо по ссылке, используя ctypes.byref
Комментариев нет:
Отправить комментарий