簡體   English   中英

無法使用ctypes在python中加載dll

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM