1

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

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

在我花太多时间在这之前,我想确保实际上可以通过这种方式来减少 IDL。

4

3 回答 3

1

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

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

于 2010-08-09T10:59:12.837 回答
1

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

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

于 2010-08-09T12:07:44.383 回答
0

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

如果您希望合并到 idl,只需将一个 idl 中的库部分的内容复制到另一个 idl 即可。然后在合并的文件上运行 midl 以将其转换为 tlb。

于 2010-08-12T08:46:14.260 回答