C DLL 在 C++ 程序中加载,而不是在 python Ctypes 中加载

Tra*_*er2 3 python dll dependencies ctypes

关于 python/ctypes 和 dll 加载的问题。

我使用 VSExpress 2010 创建了一个 C Dll(外部 C 声明)。我可以使用 CPP 测试程序加载并执行该 dll。但是,当我尝试通过 ctypes 在 python 中加载 dll 时,我收到旧的“WindowsError: [Errno 126] 找不到指定的模块”错误消息。

到目前为止我已经做了以下事情:

1.) 在 python 端三次检查 DLL 的路径,并尝试绝对路径以完全确保找到 DLL。

2.)在depends.exe中调出DLL,并验证依赖树中似乎没有丢失任何内容(在Win 7上,所以依赖输出有点不稳定,但从研究来看,似乎没有什么不合适的地方,任何人都知道依赖-比如更兼容Win7的工具?)

3.) 我有一个 .bat 文件,它设置了所有环境变量,并采取了其他操作(共同定位依赖项)以确保所有依赖项都得到解决。同样,除了典型的 Win7 操作系统故障之外,depends 中的所有内容都显示干净。

有人知道调试此类问题的好方法吗?更好的依赖版本?有一种方法可以准确地查看哪些符号/模块无法从 python 加载?

同样,CPP 测试程序完美地加载并执行了 dll。真的不知道Python 端发生了什么。任何调试方面的帮助都值得赞赏。

谢谢。

Mar*_*nen 6

使用Sysinternals 进程监视器。配置它来监视操作python.exe过程CreateFile

过程监视器过滤器对话框

然后运行你的脚本。在下面的示例中,我运行了:

>>> from ctypes import *
>>> CDLL('x')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\dev\Python33x64\lib\ctypes\__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] The specified module could not be found
Run Code Online (Sandbox Code Playgroud)

x.dll不存在,在跟踪底部附近有以下结果,但请注意,任何丢失的依赖 DLL 都会以类似方式显示:

进程监控跟踪