Страницы

Поиск по вопросам

пятница, 1 марта 2019 г.

Вызов функции из dll написанной на delphi из python

Импортировал 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

Комментариев нет:

Отправить комментарий