首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在具有ctype的python中加载dll

无法在具有ctype的python中加载dll
EN

Stack Overflow用户
提问于 2016-01-05 16:22:30
回答 1查看 4.2K关注 0票数 4

我试图加载一个dll形式的python代码与ctypes,它引发了一个错误。

我的python代码:

代码语言:javascript
复制
import ctypes
from ctypes import *
hllDll = ctypes.WinDLL ("c:\\Users\\saar\\Desktop\\pythonTest\\check.dll")

这引发了这个错误:

代码语言:javascript
复制
Traceback (most recent call last): 
  File "C:\AI\PythonProject\check.py", line 5, in  
    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路径,或者导入ctype,然后写道: from ctypes import*。

EN

回答 1

Stack Overflow用户

发布于 2016-01-05 16:48:42

check.dll可能在文件夹中有依赖项,因此在使用它之前,use可以首先调用os.chdir要设置工作目录,例如:

代码语言:javascript
复制
import ctypes
import os

os.chdir(r'c:\Users\saar\Desktop\pythonTest')
check = ctypes.WinDLL(r'c:\Users\saar\Desktop\pythonTest\check.dll')

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

或者,LoadLibraryEx可以通过以下方式使用win32api获取句柄并将其传递给WinDLL,如下所示:

代码语言:javascript
复制
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)

微软已经开发了一个DLL依赖关系检查器,名为depends.exe但不幸的是,很久以前就停止了这方面的进一步发展。不过,现在还有其他类似的实用程序可以做同样的事情。这个想法是,如果你试图加载你的DLL,但它需要另一个你没有的DLL来工作,DLL加载将会失败,而不会给出明显的原因。通过使用这些工具,您可以找到问题所在。

Microsoft推荐使用Dependencies它在github上可用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34607082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档