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

Python WindowsError:[错误126]加载带有ctypes的DLL时,python,windows,dll,ctypes,Python,Windows,Dll,Ctypes,这在使用Python 2.7的Windows 7上运行良好: lib = ctypes.cdll.LoadLibrary('prov_means') provmeans = lib.provmeans 库prov_means.DLL位于我的工作目录中。它导出一个简单、独立的C函数provmeans(),没有依赖项 当我在WindowsXP和Python2.7上尝试同样的方法时,我得到了 Traceback (most recent call last): File "D:\python

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

lib = ctypes.cdll.LoadLibrary('prov_means')
provmeans = lib.provmeans  
库prov_means.DLL位于我的工作目录中。它导出一个简单、独立的C函数provmeans(),没有依赖项

当我在WindowsXP和Python2.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 

有或没有“.DLL”扩展名。什么都不管用。

您使用哪个编译器构建库?可能缺少一些必需的库?您可以使用Dependency Walker检查库具有哪些依赖项(http://www.dependencywalker.com/)?

当找不到依赖DLL时,会出现错误126。这有两个明显的原因:

  • 找不到您的DLL
  • 您的DLL依赖于找不到的其他DLL
  • 我怀疑选项1是个问题,但无论如何,我想我可能会使用该DLL的完整路径来确定

    这样就可以选择选项2,最常见的原因是目标机器没有安装C++运行时。在目标机上安装C++运行时,或者在构建DLL时使用静态链接,这样就不需要重新分配运行时。


    可能,在开发DLL的机器上,安装了C++编译器,并为您安装了运行时。在您的目标计算机上,如果代码失败,则您尚未安装编译器,因此运行时不存在。

    谢谢David。这听起来很有道理,因为我用VisualStudio2010 Express在Windows7机器上编译,它不在目标机器上。我按照建议在目标机器上安装了C++运行时并重新启动。不幸的是,同样的错误。您可以在配置文件模式下使用Dependency Walker来检查这一点。但是我会考虑用代码> > MT <代码>重建DLL,只是重复检查它不是引起问题的依赖性。对,只是用/MT重建,现在它在目标上运行。非常感谢!我认为这意味着您可以通过安装re dist来解决这个问题,但是对于一个简单的DLL,
    /MT
    是最简单的选择。它让你的DLL独立运行。这对我很有帮助。只是在谷歌上搜索一下,我就找到了这个帖子,很高兴在你的帮助下,我这么快就找到了解决方案。
    "d:\\python\\auxil\\src\\prov_means"