2012-05-25 59 views
2

我已经看过关于这个主题的其他文章,但我想知道是否有某种方式做到这一点,而不直接改变到库的目录或显式指定绝对路径,如通过sys。 path.append或在Windows上使用PATH或CLASSPATH环境变量。我现在想要做的是加载“jvm.dll”ctypes将不会加载库

+0

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

回答

0

如果问题的DLL没有任何依赖关系,可以通过传递ctypes工厂的绝对路径来加载库DLL(你可以确定你想要的)。但是,DLL通常捆绑在一起并具有相互依赖性。您最可靠的赌注可能是将DLL的包含目录添加到os.environ['PATH']以确保依赖的DLL可以由OS库加载程序自动解析。请注意,如果您担心污染环境,您可以暂时这样做。

dll_dir = r'c:\foo\bar\path' 
tmp = os.environ['PATH'] 
os.environ['PATH'] = dll_dir + ';' + tmp 
ctypes.LoadLibrary(dll_name) 
os.environ['PATH'] = tmp 
+1

这也没有工作。实际上,只把目录放在PATH中保存dll(即设置os.environ ['PATH'] = r'“C:\ Program Files(x86)\ Java \ jdk1.7.0_04 \ jre \ bin \ client “')不起作用。另一方面,os.chdir('C:/ Program Files(x86)/Java/jdk1.7.0_04/jre/bin/client')可以工作。 – Cenoc

+0

您是否尝试将其添加到现有路径的前端,而不是完全替换路径?可能需要额外的PATH条目。 – Rakis

+0

我做到了,那里没有运气。我认为它可能不会使用PATH,这很奇怪。 – Cenoc