2

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

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

这完美地工作,因为它有一个例外:我现在必须分发两个 dll 而不是一个。这实际上违背了我正在处理的项目的要求:交付一个 DLL。

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

4

2 回答 2

3

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

并且绝对考虑升级到 VS2010。它的“嵌入互操作类型”功能允许您在没有互操作程序集的情况下发布您的程序集。

于 2012-05-01T02:11:43.453 回答
1

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

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

这可能具有不能在同一个程序集中使用 C# 的缺点。如果您想将 C# 代码添加到混合中,您可以使用

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

于 2012-05-01T01:29:01.920 回答