无法在 python 中加载 c++ DLL

Posted

技术标签:

【中文标题】无法在 python 中加载 c++ DLL【英文标题】:could not load c++ DLL in python 【发布时间】:2012-11-07 07:30:14 【问题描述】:

我正在尝试在 Python 中使用 C++ .dll,但我什至无法加载它。我正在尝试使用以下 python 代码来加载它:

from ctypes import cdll
mydll = cdll.LoadLibrary('SORT_DLL.dll')

但是当我尝试运行它时,我得到:

D:\...\src\SORT_DLL\Debug>UseDll.py
Traceback (most recent call last):
  File "D:\...\src\SORT_DLL\Debug\UseDll.py", line 2, in
 <module>
    mydll = cdll.LoadLibrary('SORT_DLL.dll')
  File "C:\Python27\lib\ctypes\__init__.py", line 443, in LoadLibrary
    return self._dlltype(name)
  File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 193] %1 ist keine zulõssige Win32-Anwendung

最后一句的英文意思是“%1 is not a valid Win32 application”。

我已经在 http://docs.python.org/2/library/ctypes.html#module-ctypes 上查找过了,但这并没有解决我的问题。

【问题讨论】:

首先,它实际上是cdll 而不是windll?其次,正如文档所述,您不应该在 Windows 上添加 .dll 后缀。 此外,调试 ctypes 加载库问题的一种好方法是显式分解步骤。首先尝试使用原生Win32 LoadLibrary(如果你有PyWin32,这是最简单的方法;如果没有,你可以ctypes系统DLL,我认为是user32,或者你可以使用@987654330中的无证包装器@) 看看你能不能搞定。然后,您可以尝试通过使用显式句柄调用构造函数来创建CDLL 实例,看看会发生什么。如果第一步有效,但第二步失败,请尝试使用句柄进行一些显式的GetProcAddress 调用。 【参考方案1】:

听起来您安装了不兼容的 Python 版本,或者使用错误的设置编译了 DLL。 DLL 和 Python 解释器都必须是 32 位或 64 位。

【讨论】:

谢谢。虽然我已经为 64 位编译了 DLL 并安装了 Python 64 位版本,但它不起作用。现在我安装了 32 位版本的 Python,一切正常。【参考方案2】:

参考这个答案: https://***.com/a/10163943/953887

“ctypes 不适用于编写 [DLL] 示例的 C++。”

【讨论】:

以上是关于无法在 python 中加载 c++ DLL的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Vista x64 的 C# 应用程序中加载 C++ DLL

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

无法在 Python 中加载共享对象文件 [重复]

无法在 WPF 项目中加载 DLL

DLL 无法在 windows server 2012 中加载

防止在工作目录中加载 dll,InvalidCastException Type A 无法转换为 Type B