我正在尝试使用 ctypes 加载一个 dll 形式的 python 代码,但它引发了一个错误。
我的 python 代码:
import ctypes
from ctypes import *
hllDll = ctypes.WinDLL ("c:\\Users\\saar\\Desktop\\pythonTest\\check.dll")
这引发了错误:
Traceback (most recent call last):
File "C:\AI\PythonProject\check.py", line 5, in <module>
hllDll = ctypes.WinDLL("c:\\Users\\saar\\Desktop\\pythonTest\\check.dll")
File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__
self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found
我用谷歌搜索它,我看到的每一篇文章都指导用两个反斜杠编写 dll 路径,
或者 import ctypes 然后写: from ctypes import *.
最佳答案
check.dll
可能在文件夹中有依赖项,因此在使用它之前,可以先调用 os.chdir
来设置工作目录,例如:
import ctypes
import os
os.chdir(r'c:\Users\saar\Desktop\pythonTest')
check = ctypes.WinDLL(r'c:\Users\saar\Desktop\pythonTest\check.dll')
您可以通过在路径字符串前加上 r
来避免需要两个反斜杠。
或者,可以通过 win32api
使用 LoadLibraryEx
获取句柄并将其传递给 WinDLL,如下所示:
import ctypes
import win32api
import win32con
dll_name = r'c:\Users\saar\Desktop\pythonTest\check.dll'
dll_handle = win32api.LoadLibraryEx(dll_name, 0, win32con.LOAD_WITH_ALTERED_SEARCH_PATH)
check = ctypes.WinDLL(dll_name, handle=dll_handle)
Microsoft 开发了一个名为 depends.exe
的 DLL 依赖性检查器,但不幸的是很久以前就停止了对它的进一步开发。虽然现在有其他类似的实用程序可以做同样的事情。这个想法是,如果您尝试加载您的 DLL,但它需要另一个您没有的 DLL 才能工作,则 DLL 加载将失败而不会给出明显的原因。通过使用这些工具,您可以定位问题所在。
微软推荐使用Dependencies可以在 github 上找到。
关于python - 无法使用ctypes在python中加载dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34607082/