Heim > Backend-Entwicklung > Python-Tutorial > Warum erhalte ich beim Laden von DLLs mit ctypes in Python die Fehlermeldung „OSerror: [WinError 193] %1 ist keine gültige Win32-Anwendung'?

Warum erhalte ich beim Laden von DLLs mit ctypes in Python die Fehlermeldung „OSerror: [WinError 193] %1 ist keine gültige Win32-Anwendung'?

DDD
Freigeben: 2024-12-01 13:19:09
Original
415 Leute haben es durchsucht

Why Am I Getting

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
Nach dem Login kopieren

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:

  1. Die Datei ist aufgrund eines fehlgeschlagenen Downloads unvollständig.
  2. Die Datei wurde überschrieben oder beschädigt.
  3. Dateisystemprobleme haben die Datei beschädigt Datei.

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)
Nach dem Login kopieren

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
Nach dem Login kopieren

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:

  • 64-Bit-Prozesse laden nur 64-Bit-DLLs.
  • 32-Bit-Prozesse laden nur 32-Bit DLLs.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage