【问题标题】:Displaying COM interop types marked as TypeLibType(TypeLibTypeFlags.FHidden) in VS 2010 IntelliSense在 VS 2010 IntelliSense 中显示标记为 TypeLibType(TypeLibTypeFlags.FHidden) 的 COM 互操作类型
【发布时间】:2011-06-11 12:33:24
【问题描述】:

我的项目引用了一个 COM DLL,该 DLL 的某些类型使用属性 [TypeLibType(TypeLibTypeFlags.FHidden)] 进行了注释。 MSDN 说,“该类型不应该显示给浏览器。”有没有办法通过 IntelliSense 查看这些类型?

【问题讨论】:

    标签: c# visual-studio visual-studio-2010 com


    【解决方案1】:

    首先确保您没有在 VisualStudio 选项(TextEditor/C# 分支)中选中“隐藏高级成员”,但我认为您没有这样做,因为默认值未选中。

    可以通过自己声明有问题的接口并忽略该属性来解决此问题。您应该能够生成互操作 DLL,然后使用反射器查看它。几乎总是可以在 C# 源代码中编写 COM 声明,但有时会变得很棘手。

    如果你想走那条路,会有一些陷阱,特别是反射器不会以正确的顺序向你显示接口成员。要找出正确的顺序,请使用 ildasm 或 TLB 查看器(两者都包含在 VisualStudio 中)。另请注意,如果您从不调用接口方法,您可以只声明一个虚拟对象来维护顺序,并且不需要完整的方法签名,这样可以节省大量工作。

    【讨论】:

    • 是的,“隐藏高级成员”未选中,所以我认为唯一的方法是按照你说的重写接口。我忘记提到的一点是,这个 DLL 是用 tlbimp.exe 生成的,但看起来没有抑制 TypeLibTypeFlags.FHidden 的选项。
    • 既然你提到了 tlbimp,这让我想起了 TlbImp2 的可用源。不过,您可能必须对其进行修改,因此只有在您需要进行大量导入时才值得付出努力。
    猜你喜欢
    • 2012-02-27
    • 2018-02-12
    • 2023-03-10
    • 2011-02-14
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多