我正在尝试在我的C#dll中实现一个COM接口供其他人使用。我在foo.idl中定义了一个接口。
我通过tlbimp运行foo.idl来生成foo.dll,一个.Net程序集。现在要实现我的界面,我可以在我的dll中引用foo.dll来实现界面。
这完全有效,因为它有一个例外:我现在必须分配两个dll而不是一个。这实际上违背了我正在进行的项目的要求:提供一个DLL。
有没有办法将tlbimp dll合并到我的或其他任何方式(在没有第二个dll的C#中实现COM接口)?
答案 0 :(得分:3)
一个好的反汇编程序可以完成工作,就像Reflector一样。您可以简单地反汇编互操作程序集并将生成的C#接口声明复制到源代码中。当然,如果接口声明和IID稳定,您应该只执行此操作。
绝对考虑升级到VS2010。它的"嵌入互操作类型"功能允许您在没有互操作组件的情况下装运组件。
答案 1 :(得分:1)
你可能会使用.tlb而不是'glue'dll。作弊。
我建议您使用MSVC ++ / CLR创建混合模式程序集
这可能有一个缺点,就是你不能在同一个程序集中使用C#。如果你想在混合中添加C#代码,你可以使用
来摆脱困境对于其他可能有趣的想法,请参阅我之前的回答: