ctypes 载入 dll 产生的 WindowsError: [Error 126] 错误原因

在 Python 里面使用 ctypes 载入 dll 时,如果这个 dll 还依赖于其它的 dll 的话,这些相关的 dll 也得要能被 Python 的进程访问到。如果访问不到就会报以下错误:

 

import sys
sys.path.append('.')
import ctypes
dll=ctypes.cdll.LoadLibrary('dll2python.dll')

Traceback (most recent call last):
    return self._dlltype(name)
  File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] 

在使用简单的谷歌搜索大法之后,得知:

导致这样的问题有两个最主要的原因

1 系统无法定位到你的DLL 动态库

2 你的DLL 动态库依赖于其他其他DLL 动态库无法被系统找到。


问题一很好解决, 在导入动态链接时,直接加入地址链接:

dll=ctypes.cdll.LoadLibrary('E://code text/python/dll2python/python call/dll2python.dll')

基本上问题就解决了

有一点让笔者不解的是,笔者已经导入了当前路径

import sys
sys.path.append('.')
系统竟然都找不到,还需要使用绝对路径才能被检索到。 有知道原因的同学请解释一下。

对于问题二, 最基本的解决方式是把相关的DLL 动态库也导进来,这样问题基本就能解决。

对于无法解决的同学,引起这类问题的主要原因在于你的目标主机没有安装 C++runtime 。  通过安装 C++ runtime ,或者使用静态链接库的方式可以解决。




你可能感兴趣的:(python)