有谁知道在 VisualStudio 的调试器中是否以及如何正确查看 COM / Interop 对象(以正确的类型)?我得到的只是'邪恶' System.__ComObject值(即使它正确识别了类型)?
例如:
有谁知道在 VisualStudio 的调试器中是否以及如何正确查看 COM / Interop 对象(以正确的类型)?我得到的只是'邪恶' System.__ComObject值(即使它正确识别了类型)?
例如:
当 COM 对象的实例通过方法的返回类型或引用参数返回给您时,CLR 无法确定类型,您将获得泛型 System.__ComObject 类型,因为始终传递 COM 对象/作为接口指针返回。
Marshal.CreateWrapperOfType
您可以尝试使用以下示例更改返回类型:
MyType newObject = (MyType)Marshal.CreateWrapperOfType(oldObject, typeof(MyType))
然后您可以在监视窗口中查看 newObject,它应该具有预期的属性。
如果调用失败,则会抛出 InvalidCastException。
我使用即时窗口手动查询 COM 对象的属性。缺点是我认为你没有智能感知,所以你必须确切地知道你想检查什么。
因此,这不是答案,但请查看这两个屏幕截图。这是来自同一个应用程序,只是在两个不同的断点处。在这两种情况下,COM 对象都来自同一个 COM/AX 库。我不知道为什么在一种情况下我看到“System.__ComObject”而在另一种情况下看到正确的类型。但是,在这两种情况下,我都看到了适当的对象/接口属性。是什么赋予了?为什么有区别?
这里的第一个显示它显示了一个“System.__ComObject”,但它也显示了该对象的所有属性。单击以查看完整大小的图像。
第二个完全隐藏了“System.__ComObject”。单击以查看完整大小的图像。