Masalah:
Pengguna menghadapi ralat berikut apabila cuba memuatkan DLL menggunakan ctypes dalam Python:
OSError: [WinError 193] %1 is not a valid Win32 application
Ralat ini berlaku apabila cuba menjalankan aplikasi 32-bit pada 64-bit sistem.
Penyelesaian:
Ralat asas ialah ERROR_BAD_EXE_FORMAT (193, 0xC1), yang berlaku apabila Windows cuba memuatkan imej boleh laku (PE) yang sebenarnya tidak . Terdapat pelbagai sebab untuk ralat ini:
Dalam kes tertentu Python memuatkan DLL, ia memanggil LoadLibraryW pada nama DLL, dan ralat yang sama berlaku jika seni bina (32-bit vs 64-bit) DLL tidak sepadan dengan proses Python. Untuk program berjalan dengan betul, seni bina CPU mesti sepadan.
Konteks Python:
CTypes menggunakan LoadLibrary untuk memuatkan DLL, yang boleh membawa kepada ralat yang sama. Berikut ialah contoh:
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)
Jika DLL mengandungi kandungan yang tidak sah, ralat akan muncul:
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 juga boleh bergantung pada DLL lain, yang boleh membawa kepada ralat yang sama jika kebergantungan tidak dipenuhi. Ralat ini boleh berlaku secara automatik apabila DLL dipautkan dengan DLL lain semasa penyusunan.
Kesimpulan:
Untuk mengelakkan ralat ini, pastikan:
Jika ralat berlaku, semak pepohon kebergantungan DLL yang terlibat, kerana ralat mungkin merebak daripada kebergantungan. Selain itu, gunakan alatan untuk menyemak kebergantungan DLL.
Cadangan:
Dalam kes khusus ini, pasang dan jalankan Python 64-bit kerana ia lebih serasi secara meluas .
Atas ialah kandungan terperinci Mengapa Saya Mendapat \'OSError: [WinError 193] %1 bukan aplikasi Win32 yang sah\' Apabila Memuatkan DLL dengan ctypes dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!