VS2017调试:无法访问COM对象的成员

时间:2018-06-12 18:41:44

标签: c# .net debugging com visual-studio-2017

问题

通常,Visual Studio的“动态视图”显示对象的成员。有时,该对象需要运行所有线程,并且您必须手动允许它才能查看成员。但是,使用此COM对象,当我尝试查看成员时出现错误:

  

无法评估表达式。操作不受支持。未知错误:0x80070057。

详细

以下是该流程的屏幕截图:

  1. 查看COM对象:

    1

  2. 查看COM对象的成员:

    2

  3. 打开动态视图会导致:

      

    功能评估需要运行所有线程。

    3

  4. 单击刷新图标时,错误会更改:

      

    无法评估表达式。操作不受支持。未知错误:0x80070057。

    4

  5. 我尝试了什么

    除了对这两个错误消息的不确定研究之外,我唯一尝试的是删除.suo文件并重新启动Visual Studio。

    我知道API调用返回的数据,因为我能够将数据打印到控制台。但是,无法从调试器中查看此数据确实让我失望。任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

Hans Passant的keyboards中的以下评论帮助我找到了解决方案:

  

您通常可以将其强制转换为其支持的某种接口类型   零件。然后调试器再次变得聪明......用它迭代它   的foreach。实际的底层运行时类型是代理,在您执行时发生   从工作线程调用该方法,或者它是否为进程外   服务器

解决方案是在尝试使用它之前首先迭代COM对象。因此,如果COM对象是一个集合,则迭代这些项目,转换为接口类型,并将结果存储在var或自定义模型中。

这样的事情:

var myObject = com.GetStuff().OfType<InterfaceClass>().Select(s => new { Name = s.Name, Description = s.Description });

答案 1 :(得分:0)

就我而言,通过启用“使用托管兼容模式”选项,我能够在调试器中查看com对象类型

在Visual Studio中,如果您打开工具>>选项,然后调试>>常规,请确保已选中“使用受管兼容模式”选项。

这应该将com对象显示为调试器中的正确类型。