работа с python cdll windows dll получила исключение памяти - PullRequest
0 голосов
/ 11 февраля 2020

Я получаю эту ошибку, когда пытаюсь вызвать эту функцию, записанную в Delphi. Но другой код работает нормально. Может быть, я не объявляю args и типы результатов? Я использую 32Bit python 3.7). Соответствующие фрагменты кода:

Delphi:

Test(deposit, MarginCall: double; CallBack: TProgrCallBackProc); stdcall;

Python:

self.FTCore = ctypes.WinDLL(self.FTCore_library_path)
self.FTCore.Test.argtypes = [ctypes.POINTER(ctypes.c_double), ctypes.POINTER(ctypes.c_double)]
self.FTCore.Test.restype = ctypes.POINTER(ctypes.c_char)
deposit = ctypes.c_double(100)
callback = ctypes.c_double(1)
self.FTCore.Test(deposit, callback)

Ошибка:

violation reading 0x00000004

1 Ответ

3 голосов
/ 11 февраля 2020

Я вижу три ошибки:

  1. Функция Delphi принимает три аргумента, вы определяете только два в argtypes. Вам нужно будет определить третий аргумент, TProgrCallBackProc, определенный где-то в коде Delphi.
  2. Два двойных параметра передаются по значению, но вы определяете их как указатели, которые удваиваются в вашем определении argtypes , Они должны быть определены как простые ctypes.c_double.
  3. Функция Delphi не имеет возвращаемого значения, но ваш restype противоречит этому. Вам нужно установить restype на None.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...