使用 tlbimp,无需第二个程序集

本文关键字:第二个 程序集 tlbimp 使用 | 更新日期: 2023-09-27 18:32:50

我正在尝试在我的C# dll中实现一个COM接口供其他人使用。 我在foo.idl中定义了一个接口。

我已经通过tlbimp运行foo.idl来生成foo.dll,一个.Net程序集。 现在要实现我的接口,我可以在我的 dll 中引用 foo.dll 来实现接口。

这非常有效,但有一个例外:我现在必须分发两个 dll 而不是一个。 这实际上违背了我正在处理的项目的要求:交付一个 DLL。

有没有办法将 tlbimp dll 合并到我的中,或者任何其他方法可以做到这一点(在没有第二个 dll 的情况下在 C# 中实现 COM 接口)?

使用 tlbimp,无需第二个程序集

一个好的反汇编器可以完成工作,比如 Reflector。 只需反汇编互操作程序集,并将生成的 C# 接口声明复制到源代码中。 当然,只有在接口声明和 IID 稳定的情况下才应执行此操作。

并且一定要考虑升级到VS2010。 其"嵌入互操作类型"功能允许您在没有互操作程序集的情况下交付程序集。

您可能通过使用 .tlb 而不是"胶水"dll 来作弊。

我建议您使用 MSVC++/CLR 创建一个混合模式程序集

  • http://msdn.microsoft.com/en-us/library/k8d11d4s(v=vs.100).aspx
  • 互操作(如何在可视C++中实现)

这可能有一个缺点,即不能在同一程序集中使用 C#。如果要将 C# 代码添加到组合中,可以使用

  • IlMerge

对于其他可能有趣的想法,请参阅我之前的回答:

  • 是否可以将控制台应用程序编译为单个.dll文件?