我有一个 ActiveX COM 控件及其源代码。我想更改方法的输入参数之一,所以我更改了 IDL 等并生成了 COM DLL 和 TLB。
但是当我在 .NET 项目中导入 COM DLL 时,该方法保留了它的旧签名。所以我尝试使用 AXIMP 生成 ActiveX DLL(虽然都是一样的,但我想试一试)。
该方法的签名仍然没有更改为我更改的内容。
但是,当我使用生成的 TLB 文件中的 TLBIMP 生成互操作 DLL 时,方法签名正确更改。
我哪里错了?
谢谢。
涉及许多手动步骤,因此很容易错过。这取决于您如何导入类型库,有不止一种方法可以做到这一点。如果您从 Add Reference + COM 选项卡中选择了引用,那么可能的错误是您忘记重新注册新的 COM 服务器。或者您不小心选择了旧的而不是新的,当您更改 guid 时可能会发生这种情况,就像您应该做的那样,忘记清理旧的。清理非常重要并且很容易被忽略,因为它需要在重建 COM 服务器之前完成。您最终可能会在注册表中得到很多垃圾。
是的,直接使用 Tlbimp.exe 是避免事故的最可靠方法。由于您直接在类型库上运行它并且根本不使用注册表。
尽可能减少麻烦的方法可能如下所示:
跳过这些步骤中的任何一个都可能引发构建问题、注册表污染、DLL Hell,并在没有完成任何事情的情况下度过一个糟糕透顶的一天。