无法在 python (3.4) 中加载 dll 文件
Posted
技术标签:
【中文标题】无法在 python (3.4) 中加载 dll 文件【英文标题】:not able to load dll file in python (3.4) 【发布时间】:2015-12-05 20:11:23 【问题描述】:我对 c++ 的经验为零,但对 python 的经验是合理的。我正在尝试加载一个 dll 库并按照另一个线程中的说明进行如下操作:
import ctypes
my_dll = ctypes.WinDLL ("c:\\whatever\\whatever.dll")
我得到的回应是:
Traceback (most recent call last):
File "C:\Users\xxx\Anaconda3\lib\site-
packages\IPython\core\interactiveshell.py", line 3035, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-6-8b21ed13fe33>", line 1, in <module>
mydll = cdll.LoadLibrary(dll_path)
File "C:\Users\xxxx\Anaconda3\lib\ctypes\__init__.py", line 429, in LoadLibrary
return self._dlltype(name)
File "C:\Users\xxx\Anaconda3\lib\ctypes\__init__.py", line 351, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 193] %1 is not a valid Win32 application
操作系统为 64 位 Windows 10。 谁能指出我出了什么问题?
谢谢。
【问题讨论】:
DLL 也是 64 位的吗?如果是,您确定您使用的是 64 位版本的 Python 吗? DLL 和 Python 解释器都必须是 32 位或 64 位。 【参考方案1】:如果 dll 存在并被找到,则可能是 32 位和 64 位不匹配。对于 C++ 应用程序,可执行文件和加载的 dll 必须是相同的架构(均为 32 位或均为 64 位),这同样适用于 Python 可执行文件。这意味着如果您运行 64 位 Python,它可能无法加载 32 位 dll,反之亦然(实际上有一种方法可以通过创建辅助 32 位进程并使用 IPC 来实现,但我不确定如果 Python 这样做)。
即检查 dll 和可执行文件 (Python) 是否是相同的架构(位大小)。
【讨论】:
非常感谢 E!是的,这就是问题所在 - 32 位和 64 位之间确实存在不匹配。以上是关于无法在 python (3.4) 中加载 dll 文件的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 3.4 中加载和读取具有多个 JSON 对象的 JSON 文件
DLL 无法在 windows server 2012 中加载