Ctype Windows 访问冲突读取 0x733B7359
Ctype Windows access violation reading 0x733B7359
我在我的 Django 项目中使用 Ctype 但是当我使用这个方法时 :
def requete_smartphone(self, bande, debut_a, debut_m, debut_j, fin_a, fin_m, fin_j, sens, fvitesse, fstat, affmes,
min, max, moyenne, ecart, algofusion, s_route, vitesse, s_capteurs, s_typeveh, s_marque,
s_modele, s_immatriculation, s_pseudo, ecart_moyenne, nombre):
""" Permet de faire la requete smarphone avec tout les paramètre qu'elle demande
Paramètres :
Les même que pour la DLL, suivre ce qui est écrit sur la fiche de la DLL
Renvoie
"""
bande = str.encode(bande)
debut_a = int(debut_a)
debut_m = int(debut_m)
debut_j = int(debut_j)
fin_a = int(fin_a)
fin_m = int(fin_m)
fin_j = int(fin_j)
sens = str.encode(sens)
fvitesse = str.encode(fvitesse)
fstat = str.encode(fstat)
affmes = str.encode(affmes)
min = str.encode(min)
max = str.encode(max)
moyenne = str.encode(moyenne)
ecart = str.encode(ecart)
algofusion = str.encode(algofusion)
s_route = str.encode(s_route)
vitesse = float(vitesse)
s_capteurs = str.encode(s_capteurs)
s_typeveh = str.encode(s_typeveh)
s_marque = str.encode(s_marque)
s_modele = str.encode(s_modele)
s_immatriculation = str.encode(s_immatriculation)
s_pseudo = str.encode(s_pseudo)
ecart_moyenne = float(ecart_moyenne)
nombre = str.encode(nombre)
print("c1")
DLLFunction = self.libraryBase.requete_smartphone
print("c2")
DLLFunction.argtypes = [c_char, c_int, c_int, c_int, c_int, c_int, c_int, c_char, c_char, c_char, c_char,
c_char, c_char, c_char, c_char, c_char, c_char_p, c_float, c_char_p, c_char_p, c_char_p,
c_char_p, c_char_p, c_char_p, c_float, c_char]
print("c3")
DLLFunction.restype = c_bool
print("c4")
resultFunction = DLLFunction(bande, debut_a, debut_m, debut_j, fin_a, fin_m, fin_j, sens, fvitesse, fstat, affmes, min, max, moyenne, ecart, algofusion, s_route, vitesse, s_capteurs, s_typeveh, s_marque, s_modele, s_immatriculation, s_pseudo, ecart_moyenne, nombre)
return resultFunction
有时我会遇到这个错误:OSError: exception: access violation reading 0x733B7359
有时它是 0x733B7359。
这可能是我的论点有问题,我不知道 .encode('utf-8') 是否真的是最好的方法。
我发现了问题:
这不是我的 DLL,当我在 C 中的方法 requete_smartphone
中搜索时。在这个方法中,我所有的 c_char 都像整数一样使用并在数组中使用(例如数组 [bande] 和我的编码c_char 的格式是 UTF-8,所以当数组 [bande] 尝试指向索引 1 中的数组时,使用编码他指向索引 49 中的数组。所以我将 DLL 更改为具有整数。
我在我的 Django 项目中使用 Ctype 但是当我使用这个方法时 :
def requete_smartphone(self, bande, debut_a, debut_m, debut_j, fin_a, fin_m, fin_j, sens, fvitesse, fstat, affmes,
min, max, moyenne, ecart, algofusion, s_route, vitesse, s_capteurs, s_typeveh, s_marque,
s_modele, s_immatriculation, s_pseudo, ecart_moyenne, nombre):
""" Permet de faire la requete smarphone avec tout les paramètre qu'elle demande
Paramètres :
Les même que pour la DLL, suivre ce qui est écrit sur la fiche de la DLL
Renvoie
"""
bande = str.encode(bande)
debut_a = int(debut_a)
debut_m = int(debut_m)
debut_j = int(debut_j)
fin_a = int(fin_a)
fin_m = int(fin_m)
fin_j = int(fin_j)
sens = str.encode(sens)
fvitesse = str.encode(fvitesse)
fstat = str.encode(fstat)
affmes = str.encode(affmes)
min = str.encode(min)
max = str.encode(max)
moyenne = str.encode(moyenne)
ecart = str.encode(ecart)
algofusion = str.encode(algofusion)
s_route = str.encode(s_route)
vitesse = float(vitesse)
s_capteurs = str.encode(s_capteurs)
s_typeveh = str.encode(s_typeveh)
s_marque = str.encode(s_marque)
s_modele = str.encode(s_modele)
s_immatriculation = str.encode(s_immatriculation)
s_pseudo = str.encode(s_pseudo)
ecart_moyenne = float(ecart_moyenne)
nombre = str.encode(nombre)
print("c1")
DLLFunction = self.libraryBase.requete_smartphone
print("c2")
DLLFunction.argtypes = [c_char, c_int, c_int, c_int, c_int, c_int, c_int, c_char, c_char, c_char, c_char,
c_char, c_char, c_char, c_char, c_char, c_char_p, c_float, c_char_p, c_char_p, c_char_p,
c_char_p, c_char_p, c_char_p, c_float, c_char]
print("c3")
DLLFunction.restype = c_bool
print("c4")
resultFunction = DLLFunction(bande, debut_a, debut_m, debut_j, fin_a, fin_m, fin_j, sens, fvitesse, fstat, affmes, min, max, moyenne, ecart, algofusion, s_route, vitesse, s_capteurs, s_typeveh, s_marque, s_modele, s_immatriculation, s_pseudo, ecart_moyenne, nombre)
return resultFunction
有时我会遇到这个错误:OSError: exception: access violation reading 0x733B7359 有时它是 0x733B7359。 这可能是我的论点有问题,我不知道 .encode('utf-8') 是否真的是最好的方法。
我发现了问题:
这不是我的 DLL,当我在 C 中的方法 requete_smartphone
中搜索时。在这个方法中,我所有的 c_char 都像整数一样使用并在数组中使用(例如数组 [bande] 和我的编码c_char 的格式是 UTF-8,所以当数组 [bande] 尝试指向索引 1 中的数组时,使用编码他指向索引 49 中的数组。所以我将 DLL 更改为具有整数。