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

标签 python windows dll anaconda virtualenv

我正在测试一个名为底层 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

我确实找到了一些讨论这个问题的帖子,例如 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 进行测试,否则我想看看效果如何。

最佳答案

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

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

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

关于python 无法在 64 位 Windows 上加载 64 位 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56263177/

相关文章:

c++ - 在 nVidia Optimus 中以编程方式选择集成显卡

c - 当调用 dlclose 时共享库中的全局变量会发生什么?

c++ - 为什么我的 DLL 在使用 MFC 作为 Visual Studio 2010 中的 DLL 的 MFC SDI 程序中使用时会泄漏?

python - 为什么转置后的 Pandas 数据框比原来的小?

python - 比较两个字典的键和值

windows - 为什么我的 Visual Studio 解决方案可执行文件需要以管理员身份运行?

c# - Windows 8 Phone 周期性任务未运行

qt - 在windows上部署Qt5应用程序的问题

python - Seaborn 散点图颜色不正确 'hue'

将匹配图像移动到单独文件夹的 Python 脚本