无法在 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 中加载吗?