使用python ctypes.CDLL()从其他目录加载.dll时出错

时间:2016-02-15 02:56:11

标签: python ctypes

我必须遵循目录结构:

MainProject  
    |    ...project files  
    |    rtlsdr\  
    |    |    rtlsdr.dll
    |    |    ...other .dll's etc.  

我正在使用库 ctypes 中的 CDLL()函数来加载rtlsdr.dll。当我的工作目录为rtlsdr\时,它可以正常工作:

$ cd rtlsdr
$ python
> from ctypes import *
> d = CDLL('rtlsdr.dll')

但是,当我尝试从另一个目录加载文件时:

$ cd MainProject
$ python
> from ctypes import *
> d = CDLL('rtlsdr\\rtlsdr.dll')

我收到错误:

WindowsError: [Error 126] The specified module could not be found.

这里有什么问题?

1 个答案:

答案 0 :(得分:4)

DLL可能有其他DLL依赖项不在工作目录或系统路径中。因此,如果未明确指定,系统无法找到这些依赖项。我找到的最好方法是将包含依赖项的目录的位置添加到系统路径:

import os
from ctypes import *
abs_path_to_rtlsdr = 'C:\\something\\...\\rtlsdr'
os.environ['PATH'] = abs_path_to_rtlsdr + os.pathsep + os.environ['PATH']
d = CDLL('rtlsdr.dll')

当前会话关闭后,PATH变量将返回其原始状态。

另一种选择是更改工作目录,但这可能会影响其他模块导入:

import os
os.chdir(abs_path_to_rtlsdr)
# load dll etc...