Home >Backend Development >Python Tutorial >Why Am I Getting \'OSError: [WinError 193] %1 is not a valid Win32 application\' When Loading DLLs with ctypes in Python?
Problem:
Users encounter the following error when trying to load a DLL using ctypes in Python:
OSError: [WinError 193] %1 is not a valid Win32 application
This error occurs when trying to run a 32-bit application on a 64-bit system.
Solution:
The underlying error is ERROR_BAD_EXE_FORMAT (193, 0xC1), which occurs when Windows tries to load an executable (PE) image that is actually not. There are various reasons for this error:
In the specific case of Python loading a DLL, it calls LoadLibraryW on the DLL name, and the same error occurs if the architecture (32-bit vs 64-bit) of the DLL does not match that of the Python process. For programs to run correctly, the CPU architectures must match.
Python Context:
CTypes uses LoadLibrary to load DLLs, which can lead to the same error. Here is an example:
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)
If the DLL contains invalid content, the error will appear:
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 can also depend on other DLLs, which can lead to the same error if the dependencies are not met. This error can occur automatically when a DLL is linked against another DLL during compilation.
Conclusion:
To avoid this error, ensure that:
If the error occurs, check the dependency tree of the DLLs involved, as the error may propagate from dependencies. Additionally, use tools to check the dependencies of the DLLs.
Recommendation:
In this specific case, install and run 64-bit Python since it is more widely compatible.
The above is the detailed content of Why Am I Getting \'OSError: [WinError 193] %1 is not a valid Win32 application\' When Loading DLLs with ctypes in Python?. For more information, please follow other related articles on the PHP Chinese website!