3

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

例如:

截屏

4

3 回答 3

2

来自.NET 和 COM:完整的互操作性指南

当 COM 对象的实例通过方法的返回类型或引用参数返回给您时,CLR 无法确定类型,您将获得泛型 System.__ComObject 类型,因为始终传递 COM 对象/作为接口指针返回。

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

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

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

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

于 2009-08-26T23:30:07.230 回答
1

我使用即时窗口手动查询 COM 对象的属性。缺点是我认为你没有智能感知,所以你必须确切地知道你想检查什么。

于 2009-08-21T04:23:35.020 回答
1

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

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

替代文字

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

替代文字

于 2009-08-25T15:06:31.877 回答