2010-05-28 90 views
0

在我的python项目中我使用ctypes库调用C++ dll。 C++ dll包含一个调用c#com interop dll方法的包装器dll。如何调试C++ dll的ctypes调用?

有时我有一个COM异常。我想看看它确切地对应着什么,但我不知道该怎么做?

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

在此先感谢

回答

0

我不知道你直接的问题,但也许你可以通过使用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 
+0

但我能得到什么异常将是更多信息?因为如果你不知道,在这种情况下,由C++调用给出的任何异常都是COM异常^^ – 2010-05-28 15:19:40

+0

是的;您可以获取原始异常中包含的所有信息,作为COMError对象的成员。 – Jorenko 2010-05-28 15:59:52

+0

编辑以显示如何从COMError对象获取额外信息。 – Jorenko 2010-05-28 16:10:28