2016-02-15 47 views
1

不同的目录.dll文件加载时,我有以下目录结构:错误从使用python ctypes.CDLL()

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

我使用的功能CDLL()ctypes的到加载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. 

什么这里是问题吗?

+0

可能的复制|访问DLL使用ctypes](http://stackoverflow.com/questions/7586504/python-accessing-dll-using-ctypes) – eryksun

回答

2

A 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... 
[Python中的