使用 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 接口)?
一个好的反汇编器可以完成工作,比如 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文件?