无法使用 ctypes 在 python 中加载 dll

Saa*_*bel 6 python dll ctypes python-2.7

我正在尝试使用 ctypes 加载 dll 形式的 python 代码,但它引发了错误。

我的Python代码:

import ctypes
from ctypes import *
hllDll = ctypes.WinDLL ("c:\\Users\\saar\\Desktop\\pythonTest\\check.dll")
Run Code Online (Sandbox Code Playgroud)

这引发了错误:

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 
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索它,我看到的每一篇文章都指南如何用两个反斜杠编写dll路径,或者导入ctypes,然后编写:from ctypes import *。

Mar*_*ans 2

该文件夹中可能check.dll有依赖项,因此在使用它之前, use 可以首先调用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')
Run Code Online (Sandbox Code Playgroud)

您可以通过在路径字符串前加上 . 前缀来避免需要两个反斜杠r

或者,LoadLibraryEx可以使用 viawin32api获取句柄并将其传递给 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)
Run Code Online (Sandbox Code Playgroud)

微软开发了一个名为 DLL 依赖项检查器depends.exe,但不幸的是很久以前就停止了进一步的开发。现在还有其他类似的实用程序可以执行相同的操作。这个想法是,如果您尝试加载 DLL,但它需要另一个您没有的 DLL 才能工作,则 DLL 加载将失败,并且不会给出明显的原因。通过使用这些工具,您可以找到问题所在。

Microsoft 建议使用github 上提供的依赖项。