将两个.IDL文件或两个.tlb文件合并到一个文件中

时间:2010-08-09 10:50:27

标签: com com-interop idl midl typelib

我有2个.net dll,我使用REGASM向COM公开。为了简化COM客户端中的引用,我想将它们组合成一个文件。

我尝试将两个文件转换为IDL,然后将一个库的一部分的内容复制到另一个,然后用MIDL编译回.tlb。这适用于第二个IDL中的TypeDef,但是当涉及到我复制的接口时它似乎失败.OLE / COM查看器可以看到接口定义但是当我尝试通过COM使用TLB时它无法找到接口我复制了。

我想确保在花费太多时间之前,确实可以通过这种方式使用IDL。

3 个答案:

答案 0 :(得分:1)

您是否可以使用ILMerge首先组合.NET程序集,然后在生成的程序集上使用REGASM?

  

ILMerge是一个合并工具   将多个.NET程序集合成一个   .NET程序集。它适用于可执行文件   和DLL一样,并附带几个   控制处理的选项   和输出的格式。

答案 1 :(得分:1)

我没有看到这种失败的明显方式。您说您合并了库部分,但您没有说您从另一个.idl复制粘贴了接口声明。这将是一个明显但不太可能的解释。

一种失败模式是客户端应用程序使用类型库来编组跨越公寓边界或进程外的接口指针。但是,这需要HKCR \ Interfaces中的注册表项。 .NET不会创建它们,你必须自己做。你知道你是否做过,也没有太多的解释。

答案 2 :(得分:0)

好的,事实证明我遇到的问题与合并idl无关。

如果你想合并到idl,你可以通过简单地将一个idl中的库部分的内容复制到另一个idl中来实现。然后在合并文件上运行midl将其转换为tlb。