WindowsError:[错误126]加载带有ctypes的DLL时

Mor*_*nty 13 python windows dll ctypes

这在使用Python 2.7的Windows 7上运行良好:

lib = ctypes.cdll.LoadLibrary('prov_means')
provmeans = lib.provmeans  
Run Code Online (Sandbox Code Playgroud)

库prov_means.DLL在我的工作目录中.它导出一个简单的,独立的C函数provmeans(),没有依赖.

当我在Windows XP和Python 2.7上尝试相同的操作时,我得到了

Traceback (most recent call last):
  File "D:\python\Auxil\src\auxil.py", line 130, in <module>
    lib = ctypes.cdll.LoadLibrary('prov_means')
  File "C:\Python27\lib\ctypes\__init__.py", line 431, in LoadLibrary
    return self._dlltype(name)
  File "C:\Python27\lib\ctypes\__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found 
Run Code Online (Sandbox Code Playgroud)

我尝试将DLL复制到Windows\System32并输入完整路径名

"d:\\python\\auxil\\src\\prov_means"
Run Code Online (Sandbox Code Playgroud)

有和没有".DLL"扩展名.什么都行不通.

Dav*_*nan 22

错误126是无法找到从属DLL时获得的错误.这有两个明显的原因:

  1. 您的DLL未找到.
  2. 您的DLL依赖于无法找到的其他DLL.

我怀疑选项1是问题,但无论如何我认为我可能会使用该DLL的完整路径来确定.

因此,留下选项2,最常见的原因是您的目标机器没有安装C++运行时./MT在构建DLL 时,在目标计算机上安装C++运行时,或使用静态链接,这样就不需要重新分配运行时.

也许,在您开发DLL的机器上,您已经安装了C++编译器并为您安装了运行时.在目标机器上,代码失败,您尚未安装编译器,因此运行时不存在.