我正在测试一个名为底层 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检查发生了什么。它具有分析功能,可以跟踪所有库加载。
它可以向您显示一些可能的问题:
- Python 是 32 位,因为执行了错误的版本
- DLL 是 32 位的
- DLL 依赖于不在路径中的其他 DLL
关于python 无法在 64 位 Windows 上加载 64 位 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56263177/