此错误源于底层错误代码称为 ERROR_BAD_EXE_FORMAT,当 Windows 尝试加载它解释为可执行文件但实际上是可执行文件时,就会出现这种情况不是。各种情况都可能导致此问题。
此错误的主要原因是尝试加载 DLL 的进程与 DLL 本身之间的体系结构不匹配。具体来说,以下情况可能会触发错误:
除了架构不匹配之外,其他因素也可能导致加载 DLL 时出现“不是有效的 Win32 应用程序”错误:
要解决此错误,请确保:
为了说明架构不匹配问题,使用了一个带有 DLL 的简单 C 程序:
import ctypes as cts import os import sys from enum import Enum class DLL(Enum): LIB_X64 = cts.CDLL("lib_x64.dll") LIB_X86 = cts.CDLL("lib_x86.dll") # Attempt to load the 64-bit DLL in a 32-bit Python process try: dll_x64 = DLL.LIB_X64 except OSError: print("DLL loading failed due to architecture mismatch")
在 32 位 Python 解释器中执行此代码将触发“不是有效的 Win32 应用程序”错误。相反,加载 32 位 DLL 将成功。
通过确保正确的架构对齐并维护 DLL 及其依赖项的完整性,可以在使用 ctypes 加载 DLL 时避免此错误。
以上是为什么我的 Python ctypes 代码在加载 DLL 时会抛出 OSError: [WinError 193] %1 不是有效的 Win32 应用程序?的详细内容。更多信息请关注PHP中文网其他相关文章!