TLBIMP和AXIMP的不同结果

本文关键字:结果 AXIMP TLBIMP | 更新日期: 2023-09-27 17:59:35

我有一个ActiveX COM控件及其源代码。我想更改该方法的一个输入参数,所以我更改了IDL等,并生成了COM DLL和TLB。

但是当我在中导入COM DLL时。NET项目中,该方法保留了其旧签名。因此,我尝试使用AXIMP生成ActiveX DLL(尽管一切都一样,但我想尝试一下)。

尽管如此,该方法的签名并没有改变为我所更改的。

但是,当我从生成的TLB文件中使用TLBIMP生成互操作DLL时,方法签名发生了正确的更改。

我哪里错了?

谢谢。

TLBIMP和AXIMP的不同结果

有很多手动步骤,所以很容易错过一个。这取决于导入类型库的方式,有多种方法可以做到这一点。如果您从"添加引用+COM"选项卡中选择了引用,那么可能的错误是忘记重新注册新的COM服务器。或者你不小心选择了旧的而不是新的,当你像应该的那样更改导向器,却忘记清理旧的导向器时,就会发生这种情况。清理非常重要,而且很容易错过,因为它需要在重建COM服务器之前完成。您最终可能会在注册表中发现大量垃圾。

是的,直接使用Tlbimp.exe是避免事故的最可靠方法。因为您直接在类型库上运行它,而且根本不使用注册表。

一个尽可能减少麻烦的方法可能是这样的:

  1. 首先通过运行regsvr.exe-u来注销旧的COM服务器
  2. 删除旧的DLL和TLB文件
  3. 更改IDL以添加新方法
  4. 为您更改的接口分配新的IID
  5. 为使用接口的coclass分配一个新的CLSID
  6. 增加库版本
  7. 更改输出DLL的名称,有利于在名称中包含主要+次要版本
  8. 生成新的COM服务器
  9. 使用regsvr32.exe注册服务器
  10. 运行Tlbimp.exe生成互操作库
  11. 在中删除对旧互操作库的引用。NET项目
  12. 使用"添加引用"+"浏览"添加新的互操作库

跳过这些步骤中的任何一个都可能引发构建麻烦、注册表污染、DLL地狱,并在一天中无所事事地度过糟糕的一天。