无法在 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 中加载共享对象文件 [重复]

无法在 WPF 项目中加载 DLL

在 Python 3.4 中加载和读取具有多个 JSON 对象的 JSON 文件

DLL 无法在 windows server 2012 中加载

在python中加载DLL时出错,不是有效的win32应用程序[重复]

我可以阻止 C++ dll 在 Python Ctypes 中加载吗?