如何调试 c++ dll 的 ctypes 调用?

Posted

技术标签:

【中文标题】如何调试 c++ dll 的 ctypes 调用?【英文标题】:How to debug ctypes call of c++ dll? 【发布时间】:2010-05-28 14:42:48 【问题描述】:

在我的 python 项目中,我使用 ctypes 库调用了一个 c++ dll。 该 c++ dll 包含在调用 c# com interop dll 方法的包装 dll 上。

有时我会遇到 COM 异常。我想看看它到底对应什么,但我不知道该怎么做?

如何将 c++ 调试器附加到这种情况?

提前致谢

【问题讨论】:

【参考方案1】:

我不知道你的直接问题,但也许你可以通过使用 comtypes 直接从 COM 转到 Python 而不是在两者之间使用 C++ 来解决它。

那么你所要做的就是:

>>> from comtypes import client, COMError
>>> myclassinst = client.CreateObject('MyCOMClass.MyCOMClass')
>>> try:
...     myclassinst.DoInvalidOperation()
... except COMError as e:
...     print e.args
...     print e.hresult
...     print e.text
...
(-2147205118, None, (u'MyCOMClass: An Error Message', u'MyCOMClass.MyCOMClass.1', None, 0, None))
-2147205118
None

【讨论】:

但是我能获得更多关于什么异常的信息吗?因为如果你不知道,在这种情况下,c++ 调用给出的任何异常都是 COM 异常^^ 是的;作为 COMError 对象的成员,您可以获得原始异常中包含的所有信息。 编辑显示如何从 COMError 对象获取额外信息。

以上是关于如何调试 c++ dll 的 ctypes 调用?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有错误消息的情况下调试 ctypes

如何将 C++ 类与 ctypes 一起使用?

如何本机附加到python进程?

如何使用 ctypes 调用具有双下划线函数名的 DLL 函数?

如何使用ctypes,python将字符串参数传递给C++函数

Python ctypes:如何将 ctypes 数组传递给 DLL?