Problem:
Benutzer stoßen auf den folgenden Fehler, wenn sie versuchen, eine DLL mithilfe von ctypes in Python zu laden:
OSError: [WinError 193] %1 is not a valid Win32 application
Dieser Fehler tritt auf, wenn versucht wird, eine 32-Bit-Anwendung auf einer 64-Bit-Version auszuführen System.
Lösung:
Der zugrunde liegende Fehler ist ERROR_BAD_EXE_FORMAT (193, 0xC1), der auftritt, wenn Windows versucht, ein ausführbares (PE) Image zu laden, das eigentlich nicht vorhanden ist . Es gibt verschiedene Gründe für diesen Fehler:
Im speziellen Fall, dass Python eine DLL lädt, ruft es LoadLibraryW für den DLL-Namen auf und dasselbe Der Fehler tritt auf, wenn die Architektur (32-Bit oder 64-Bit) der DLL nicht mit der des Python-Prozesses übereinstimmt. Damit Programme korrekt ausgeführt werden, müssen die CPU-Architekturen übereinstimmen.
Python-Kontext:
CTypes verwendet LoadLibrary zum Laden von DLLs, was zum gleichen Fehler führen kann. Hier ist ein Beispiel:
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)
Wenn die DLL ungültige Inhalte enthält, wird der Fehler angezeigt:
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:
DLLs kann auch von anderen DLLs abhängen, was zu demselben Fehler führen kann, wenn die Abhängigkeiten nicht erfüllt sind. Dieser Fehler kann automatisch auftreten, wenn eine DLL während der Kompilierung mit einer anderen DLL verknüpft wird.
Schlussfolgerung:
Um diesen Fehler zu vermeiden, stellen Sie sicher, dass:
Wenn der Fehler auftritt, überprüfen Sie den Abhängigkeitsbaum der beteiligten DLLs, da sich der Fehler möglicherweise von Abhängigkeiten ausbreitet. Verwenden Sie außerdem Tools, um die Abhängigkeiten der DLLs zu überprüfen.
Empfehlung:
In diesem speziellen Fall installieren und führen Sie 64-Bit-Python aus, da es weitreichender kompatibel ist .
Das obige ist der detaillierte Inhalt vonWarum erhalte ich beim Laden von DLLs mit ctypes in Python die Fehlermeldung „OSerror: [WinError 193] %1 ist keine gültige Win32-Anwendung'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!