【发布时间】: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调用。