2

关于 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 端发生了什么。任何调试帮助表示赞赏。

谢谢。

4

1 回答 1

4

使用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

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

进程监视器跟踪

于 2013-09-06T04:59:20.457 回答