[英]cannot load dll in python with ctypes
我正在嘗試使用 ctypes 加載一個 dll 形式的 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 路徑,或者導入 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)
微軟開發了一個名為depends.exe
的 DLL 依賴檢查器,但不幸的是很久以前就停止了對它的進一步開發。 雖然現在有其他類似的實用程序可以做同樣的事情。 這個想法是,如果您嘗試加載您的 DLL,但它需要另一個您沒有的 DLL 才能工作,則 DLL 加載將失敗而不會給出明顯的原因。 通過使用這些工具,您可以定位問題所在。
Microsoft 建議使用 github 上提供的依賴項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.