使用tlbimp而不需要第二次组装?

时间:2012-05-01 01:22:59

标签: c# com com-interop tlbimp

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

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

这完全有效,因为它有一个例外:我现在必须分配两个dll而不是一个。这实际上违背了我正在进行的项目的要求:提供一个DLL。

有没有办法将tlbimp dll合并到我的或其他任何方式(在没有第二个dll的C#中实现COM接口)?

2 个答案:

答案 0 :(得分:3)

一个好的反汇编程序可以完成工作,就像Reflector一样。您可以简单地反汇编互操作程序集并将生成的C#接口声明复制到源代码中。当然,如果接口声明和IID稳定,您应该只执行此操作。

绝对考虑升级到VS2010。它的"嵌入互操作类型"功能允许您在没有互操作组件的情况下装运组件。

答案 1 :(得分:1)

你可能会使用.tlb而不是'glue'dll。作弊。

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

这可能有一个缺点,就是你不能在同一个程序集中使用C#。如果你想在混合中添加C#代码,你可以使用

来摆脱困境

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