使用ctypes(python)加载带括号路径的dll时出错
我想在一台64位的电脑上访问一个位于“c:/Program Files (x86)”文件夹里的dll文件。
当我用os.path.exists来检查这个dll是否存在时,结果是肯定的:
>>> print os.path.exists('c:/Program Files (x86)/Some Folder/SomeDll.dll')
True
但是当我尝试用ctypes加载这个dll时,却出现了以下错误:
>>> from ctypes import WinDLL
>>> some_dll = WinDLL('c:/Program Files (x86)/Some Folder/SomeDLL.dll')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Python26\lib\ctypes\__init__.py", line 353, in __init__
self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found
在32位的电脑上,这个dll文件位于“c:/Program Files”文件夹里,我可以毫无问题地打开它。我觉得问题可能出在文件夹名称中的括号上。因为返回的异常是WindowsError,看起来是操作系统加载库的功能出了问题。
所以,我的问题是:我该如何加载位于“c:/Program Files (x86)”文件夹里的dll文件?我不能把这个dll复制到其他地方,它必须保留在原来的路径下……
谢谢!
2 个回答
2
抱歉,我没有50个积分来评论(这个要求真是无聊),不过 /Program Files (x86)/
其实就是 Progra~2
,而 /Program Files/
则是 Progra~1
。
这是为了防止Felipe Ferri再次看到这个 :) 或者其他想做同样事情的人。
注意:这假设你没有其他以 Progra
开头的长文件夹,如果有的话,结果可能会不同。你实际上是在从一个按字母顺序排列的文件夹列表中选择 - 这个方法适用于任何超过8个字符的文件夹,你只需要去掉最后两个字符,然后第一个加上~1,其他相同字符的文件夹依次递增。
8
你试过用 "C:/Progra~1/SomeFolder/SomeDll" 这个路径吗?
还有一个建议:
os.chdir(r"C:\Program Files(x86)\SomeFolder")
the_dll = WinDLL("SomeDLL.dll")