在VS.Net的调试器中正确检查COM / Interop类的实例?

时间:2009-08-20 13:39:14

标签: .net com interop com-interop

有人知道在VisualStudio的调试器中是否以及如何正确地看到COM / Interop对象(正确的类型)?我得到的只是' evil ' System .__ ComObject 值(即使它正确识别了类型)?

E.g:

Screenshot

3 个答案:

答案 0 :(得分:2)

来自.NET and COM: The Complete Interoperability Guide

当通过方法的返回类型或by-reference参数返回COM对象的实例,并且CLR无法确定类型时,您将获得通用的System .__ ComObject类型,因为COM对象总是作为接口指针传递/返回。

您可以尝试使用Marshal.CreateWrapperOfType更改返回类型,如下例所示:

MyType newObject = (MyType)Marshal.CreateWrapperOfType(oldObject, typeof(MyType))

然后,您可以在监视窗口中查看newObject,它应具有预期的属性。

如果调用失败,则会抛出InvalidCastException。

答案 1 :(得分:1)

我使用了立即窗口来手动查询COM对象的属性。缺点是我不认为你会得到intellisense所以你必须确切地知道你想要检查什么。

答案 2 :(得分:1)

所以,这不是一个答案,但请查看这两个屏幕截图。这是来自同一个应用程序,仅在两个不同的断点处。在这两种情况下,COM对象都来自同一个COM / AX库。我不知道为什么在一种情况下我会看到“System .__ ComObject”而在另一种情况下我看到的是正确的类型。但是,在这两种情况下,我都看到了适当的对象/接口属性。是什么赋予了?为什么不同?

这里的第一个显示它显示了一个“System .__ ComObject”,但它也向我显示了该对象的所有特性。单击以查看完整大小的图像。

alt text

第二个完全隐藏“System .__ ComObject”。单击以查看完整大小的图像。

alt text