首页 > 解决方案 > python 无法在 64 位 Windows 上加载 64 位 DLL

问题描述

我正在测试一个调用底层 DLL 库的小型 python 程序。

我的系统是 64 位 windows 7。python 可执行文件是 64 位 Anaconda3 附带的,在 Anaconda 的虚拟环境中启动。

首先引起我注意的是这个python代码

sys.platform

即使对于 AMD64 Arch,也返回 win32,“platform.machine()”似乎返回了更准确的结果。

Python 3.7.3 (default, Mar 27 2019, 17:13:21) [MSC v.1915 64 bit (AMD64)] on win32

我确实找到了一些讨论这个问题的帖子,比如这个

然后程序在尝试加载 DLL 文件时失败:

windll.LoadLibrary(realpath(join(_module_location, 'dlh', 'win64', 'I_cant_tell_you_the_name.dll')))

错误信息:

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

问题是,为什么 python 不能在 64 位环境下加载 64 位 DLL?在我看来,编译器坚持要加载 32 位 DLL。这是为什么?还是 Anaconda 创建的 venv 仅支持 32 位代码?

不幸的是,我没有用于测试的 32 位 DLL,否则我想看看结果如何。

标签: pythonwindowsdllanacondavirtualenv

解决方案


您可以使用Dependency Walker检查发生了什么。它有一个分析功能,可以跟踪所有库加载。

它可以向您显示一些可能的问题:

  1. Python 是 32 位的,因为执行了错误的版本
  2. DLL 不知何故是 32 位的
  3. DLL 依赖于不在路径中的其他 DLL

推荐阅读