python - 无法使用ctypes在python中加载dll

标签 python python-2.7 dll ctypes

我正在尝试使用 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/

相关文章:

Python 无法从 urllib.request 中找到模块请求

dll - 在哪里初始化托管 C++/CLI DLL?

c++ - 使用 C++ 代码从 FORTRAN DLL 调用函数

javascript - JS 和 Python 之间的基准测试性能差异

python - 使用 BeautifulSoup 抓取具有不变 URL 的多个页面

python - 如何通过诗歌构建C扩展?

python - py2exe找不到模块

python - Centos 6 中使用 SCL Python 2.7 的 Ansible 加密警告

python - 类型错误 : "' TrieNode' object is not callable"- What is wrong with my code?

dll - 在 Lua 5.1 中使用自定义 DLL