【问题标题】:How do I access IMetaDataEmit and other MetaData COM interfaces from C# or F#?如何从 C# 或 F# 访问 IMetaDataEmit 和其他 MetaData COM 接口?
【发布时间】:2023-03-13 11:56:01
【问题描述】:

我正在用 F# 编写编译器,我希望能够在 .net 运行时访问 unmanaged metadata COM interfaces。在任何人提到它之前,Reflection.Emit 不适合我的目的,我也不想使用元数据 COM 接口之外的任何其他方法。

我已经导入了 mscoree.tlb,但它似乎没有包含我需要的接口。

我感兴趣的接口包括IMetaDataEmit。任何与此相关的示例代码都会非常有用,尽管到目前为止我还没有找到。

C# 示例很好,因为我可以轻松地将它们转换为 F#。

提前感谢任何可以帮助我解决这个相当神秘的查询的人!

更新:我现在已经通过使用接口 GUID 编写显式 COM 引用来进行排序!

【问题讨论】:

    标签: c# com f# com-interop


    【解决方案1】:

    这里的一个选项是创建您自己的项目并将这些接口(使用它们在 cor.h 中的定义)编译到类型库中,然后您可以将其 tlbimp 到托管程序集中。我意识到将 C 标头代码转换为 IDL 会非常繁琐,但可以通过一些文本处理脚本来自动化(或部分自动化)。

    【讨论】:

    • 非常感谢您的回复 :-) 但是我现在已经设法使用基于 cor.h 中引用的 GUID 的手动 COM 接口对此进行排序,结果证明这是我认为的最佳方法!
    【解决方案2】:

    我希望您找到了mdbg sample,其中包含用于封装您需要的接口的源代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 2010-09-30
      • 2015-10-13
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      • 2013-08-21
      相关资源
      最近更新 更多