首页 >后端开发 >Python教程 >在 Python 中使用 ctypes 加载 DLL 时,为什么我会收到'OSError: [WinError 193] %1 is not a valid Win32 application\”?

在 Python 中使用 ctypes 加载 DLL 时,为什么我会收到'OSError: [WinError 193] %1 is not a valid Win32 application\”?

DDD
DDD原创
2024-12-01 13:19:09337浏览

Why Am I Getting

问题:

用户尝试在 Python 中使用 ctypes 加载 DLL 时遇到以下错误:

OSError: [WinError 193] %1 is not a valid Win32 application

尝试在 64 位上运行 32 位应用程序时会出现此错误system.

解决方案:

潜在错误是 ERROR_BAD_EXE_FORMAT (193, 0xC1),当 Windows 尝试加载实际上不是的可执行 (PE) 映像时,会发生此错误。导致此错误的原因有多种:

  1. 由于下载失败,文件不完整。
  2. 文件被覆盖或损坏。
  3. 文件系统问题损坏了

在 Python 加载 DLL 的特定情况下,它会调用 LoadLibraryW DLL 名称,如果 DLL 的体系结构(32 位与 64 位)与 Python 进程的体系结构不匹配,则会出现相同的错误。为了使程序正确运行,CPU 架构必须匹配。

Python 上下文:

CTypes 使用 LoadLibrary 加载 DLL,这可能会导致相同的错误。下面是一个示例:

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)

如果 DLL 包含无效内容,则会出现错误:

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

额外奖励:

DLL还可以依赖其他 DLL,如果不满足依赖关系,可能会导致相同的错误。当一个 DLL 在编译期间链接到另一个 DLL 时,会自动发生此错误。

结论:

要避免此错误,请确保:

  • 64 位进程仅加载 64 位 DLL。
  • 仅 32 位进程加载 32 位 DLL。

如果发生错误,请检查所涉及 DLL 的依赖关系树,因为错误可能会从依赖关系传播。此外,使用工具检查 DLL 的依赖关系。

建议:

在这种特定情况下,安装并运行 64 位 Python,因为它具有更广泛的兼容性.

以上是在 Python 中使用 ctypes 加载 DLL 时,为什么我会收到'OSError: [WinError 193] %1 is not a valid Win32 application\”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn