2017-07-11 7 views
-1

J'ai cherché des réponses à cette question, mais je continue à vide. J'ai réussi à obtenir un couple de la travail de DLL, mais celui-ci me donne quelques problèmes:OSError: violation d'accès de lecture 0xXXXXXXXXXXX erreur lors de l'appel d'une DLL en utilisant ctypes

import ctypes 
from ctypes import * 
import my_module 

dll = CDLL('C:\\Path_to_dll') 
MF = (b'C:\\Path_to_file') 

cela ne fonctionne pas:

PN = (b'parameter_name') 
beginTime = ctypes.c_double(-value) 
endTime = ctypes.c_double(+value) 
DT_RETURNGMT = 0x0100 
DT_FLOAT = 0x0001 
convertType = (DT_RETURN|DT_BOOL) 
Null = 0 

dll.readPam.argtypes = POINTER(File), c_char_p, 
c_double, c_double, c_double, POINTER(TTag), c_ushort, 
dll.readPam.restype = POINTER(Pam) 

C'est là l'erreur apparaît:

g = dll.readPam(f, PN, beginTime, endTime, Null, Null, convertType) 

OSError: exception: access violation reading 0x0000000000000000 

Ma question est la suivante: Quelle est l'erreur qui indique qu'elle ne peut pas lire et comment puis-je la réparer? Ce que le dll doit faire est d'imprimer sur des valeurs de données lorsque je tape:

print(g) 
print(g[0].tS[0].data) 
dll.freePam(g) 
+0

Vous devez montrer un [mcve] qui peut reproduire le problème. –

+0

Juste à partir de la mise en évidence de la syntaxe seule, on peut voir qu'il y a des erreurs de syntaxe dans votre code ....! –

+0

@RossRidge J'ai ajouté plus d'informations sur mon code –

Répondre

0

J'ai résolu mon problème. Je libérais mon fichier avant que j'aie fini de l'utiliser. Donc, où j'ai écrit:

dll.freeFile(f) 

Je libérais le fichier quand je n'aurais pas dû. J'ai donc supprimé cette ligne et maintenant c'est à la fin de mon code. Ironiquement, une fois que j'ai résolu ce problème, python m'en a donné un autre ...