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