Problème :
Les utilisateurs rencontrent l'erreur suivante lorsqu'ils tentent de charger une DLL à l'aide de ctypes en Python :
OSError: [WinError 193] %1 is not a valid Win32 application
Cette erreur se produit lorsque vous essayez d'exécuter une application 32 bits sur un ordinateur 64 bits. système.
Solution :
L'erreur sous-jacente est ERROR_BAD_EXE_FORMAT (193, 0xC1), qui se produit lorsque Windows tente de charger une image exécutable (PE) qui n'est en réalité pas . Il existe plusieurs raisons à cette erreur :
Dans le cas spécifique où Python charge une DLL, il appelle LoadLibraryW sur le nom de la DLL, et le la même erreur se produit si l'architecture (32 bits vs 64 bits) de la DLL ne correspond pas à celle du processus Python. Pour que les programmes fonctionnent correctement, les architectures de processeur doivent correspondre.
Contexte Python :
CTypes utilise LoadLibrary pour charger les DLL, ce qui peut conduire à la même erreur. Voici un exemple :
import ctypes import os dll_name = os.path.join( os.path.dirname(__file__), DLL_BASE_NAME + ("dll" if sys.platform[:3].lower() == "win" else "so")) print(f"Attempting to load: [{dll_name}]") dll00 = cts.CDLL(dll_name)
Si la DLL contient du contenu invalide, l'erreur apparaîtra :
Traceb (most recent call last): File "code00.py", line 25, in <module> rc = main(*sys.argv[1:]) File "code00.py", line 14, in main dll00 = ct.CDLL(dll_name) File "c:\Install\pc064\Python\Python.07.09\lib\ctypes\__init__.py", line 364, in __init__ self._handle = _dlopen(self._name, mode) OSError: [WinError 193] %1 is not a valid Win32 application
Bonus :
DLL peut également dépendre d'autres DLL, ce qui peut conduire à la même erreur si les dépendances ne sont pas respectées. Cette erreur peut se produire automatiquement lorsqu'une DLL est liée à une autre DLL lors de la compilation.
Conclusion :
Pour éviter cette erreur, assurez-vous que :
Si l'erreur se produit, vérifiez l'arborescence des dépendances des DLL impliquées, car l'erreur peut se propager à partir des dépendances. De plus, utilisez des outils pour vérifier les dépendances des DLL.
Recommandation :
Dans ce cas précis, installez et exécutez Python 64 bits car il est plus largement compatible .
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!