python无法在64位Windows上加载64位DLL

时间:2019-05-22 18:48:06

标签: python windows dll anaconda virtualenv

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

我的系统是64位Windows7。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

我确实找到了一些讨论此问题的SO帖子,例如this one

,然后在尝试加载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,否则我想看看效果如何。

1 个答案:

答案 0 :(得分:0)

您可以使用Dependency Walker检查正在发生的事情。它具有概要分析功能,可以跟踪所有库负载。

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

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