窗口错误:[错误126]找不到指定的模块

2024-06-15 23:10:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用以下代码在python中加载dll:

if os.path.exists(dll_path):
     my_dll = ctypes.cdll.LoadLibrary(dll_path)

但我不断地得到以下错误

窗口错误:[Error 126]找不到指定的模块

指定路径中存在dll,但我不明白为什么会出现此错误。


Tags: 模块path代码路径ifosmy错误
3条回答

请注意,即使DLL在您的路径中。如果该DLL依赖于不在您路径中的其他DLL,则可能会出现相同的错误。在这种情况下,Windows找不到依赖项。Windows并不擅长告诉你它找不到什么,只是它找不到什么。这取决于你自己。可以在此处找到Windows dll搜索路径: http://msdn.microsoft.com/en-us/library/7d83bc18.aspx

在我的例子中,确保所有需要的dll都在同一个目录中,并对该目录执行os.chdir()操作就解决了这个问题。

我在Win10 32位操作系统中遇到了同样的问题。我通过将DLL从debug改为release版本解决了这个问题。

我认为这是因为调试版本的DLL依赖于其他DLL,而发布版本没有。

当我看到像这样的东西-这通常是因为路径中有反斜杠被转换。

例如-以下操作将失败-因为字符串中的\t被转换为制表符。

>>> import ctypes
>>> ctypes.windll.LoadLibrary("c:\tools\depends\depends.dll")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\tools\python271\lib\ctypes\__init__.py", line 431, in LoadLibrary
    return self._dlltype(name)
  File "c:\tools\python271\lib\ctypes\__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found

有3种解决方案(如果这是问题的话)

a)使用双斜杠。。。

>>> import ctypes
>>> ctypes.windll.LoadLibrary("c:\\tools\\depends\\depends.dll")

b)使用正斜杠

>>> import ctypes
>>> ctypes.windll.LoadLibrary("c:/tools/depends/depends.dll")

c)使用原始字符串(在字符串前面加上r

>>> import ctypes
>>> ctypes.windll.LoadLibrary(r"c:\tools\depends\depends.dll")

虽然第三个可以工作,但我时常有一种印象,认为它不“正确”,因为原始字符串是用于正则表达式的。多年来,我一直在Python中使用它作为Windows上的路径,没有问题:))

相关问题 更多 >