Je reçois cette erreur lorsque j'essaie d'appeler cette fonction écrite en Delphi. Mais un autre code fonctionne très bien. Peut-être que je ne déclare pas les types de résultats args et result? J'utilise python 32Bit 3.7). Extraits de code associés :

Delphes:

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)

Erreur:

violation reading 0x00000004
0
Evgeniya Smirnova 11 févr. 2020 à 13:51

1 réponse

Meilleure réponse

Trois erreurs que je peux voir :

  1. La fonction Delphi accepte trois arguments, vous n'en définissez que deux dans argtypes. Vous devrez définir le troisième argument, TProgrCallBackProc défini quelque part dans le code Delphi.
  2. Les deux paramètres doubles sont passés par valeur, mais vous les définissez comme des pointeurs pour doubler dans votre définition argtypes. Ils doivent être définis comme simples ctypes.c_double.
  3. La fonction Delphi n'a pas de valeur de retour, mais votre restype contredit cela. Vous devez définir restype sur None.
3
David Heffernan 11 févr. 2020 à 11:48