Salut à tous

Je me heurte depuis quelques jours à un problème que je ne comprends pas. J'avais un code qui fonctionnait il y a 6 mois. Je n'y ai pas touché depuis et là il ne fonctionne plus. Il s'agit d'une erreur sur l'import d'une dll que mon code ne trouve plus. Sauf que la dll n'a pas bougé non plus ! ... Je regarde le sys.path, le dossier de la dll est bien dedans. Après, comme indiqué dans la doc de ctypes.cdll, ca peut être du à une autre dll, dont la dll surlaquelle je tire dépend. Ok, je recommences l'exercice avec une dll plus simple alors, sans dépendance. J'en ai trouvé une sur la toile :

smalldll.dll

(et en effet quand je la passe au dependency walker, il n'y a pas de dépendance). J'ouvre python directement dans mon shell pour ce nouveau test, comme ça en plus j'élimine les choses liées à l'IDE.

Je place 'smalldll.dll', directement à la racine de E:// dans cet exemple. Et je travaille dans un dossier temp que je créée en dessous.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
import os,sys
from ctypes import cdll
 
os.chdir('E:\\temp')
print(sys.getcwd()) ## Ok, je suis bien dans E://temp
cdll.LoadLibrary('E://smalldll.dll')
Sur ce code la dll est trouvée. J'ai une
Code : Sélectionner tout - Visualiser dans une fenêtre à part
OSError: [WinError 193] %1 n’est pas une application Win32 valide
mais ok, la dll est trouvée donc.

Si maintenant, je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
if 'E://' not in sys.path : sys.path.append('E://')
cdll.LoadLibrary('smalldll.dll')
Là je retombe sur l'erreur de dll introuvable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
OSError: [WinError 126] Le module spécifié est introuvable
Pourtant le répertoire dans lequel se trouve celle ci est bien dans mon python path ...

Dans le cas d'une dll qui tire sur autre dll, je n'ai pas la main pour pouvoir lui donner le chemin absolu. Je dois donc parvenir à faire fonctionner ce 2ième test.

L'un de vous a t il déjà rencontré un problème similaire ? Parvenez vous au même résultat que moi avec ce petit exemple de smalldll.dll ? Je suppute que ctypes.cdll a changé sa manière de faire, mais je ne trouve rien dans la doc concernant cela ...

J'ai essayé avec mon install de anaconda python 3.7, et aussi après avec un python 3.10.2 que je viens d'installer pour l'occasion. Que ce soit 3.7 ou 3.10.2, j'obtiens les mêmes résultats (c-à-d, la dll est trouvée si je donne le chemin absolu, mais ne l'est pas si je donne juste son nom et que le répertoire dans lequel elle se trouve est dans le sys.path)

Merci pour vos retours