不能用ctypes在python中加载dll

时间:2016-01-05 08:22:30

标签: 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路径, 或导入ctypes然后写:来自ctypes import *。

1 个答案:

答案 0 :(得分:1)

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')

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

或者,可以通过LoadLibraryEx使用win32api来获取句柄并将其传递给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)