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 *。
该文件夹中可能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 上提供的依赖项。
| 归档时间: |
|
| 查看次数: |
7429 次 |
| 最近记录: |