首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TLBIMP和AXIMP的不同结果

TLBIMP和AXIMP的不同结果
EN

Stack Overflow用户
提问于 2013-02-15 17:55:17
回答 1查看 846关注 0票数 2

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

但是,当我在.NET项目中导入COM时,该方法保留了它的旧签名。因此,我尝试使用AXIMP生成AXIMP(虽然都是一样的,但我想试一试)。

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

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

我在哪里会错呢?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-15 19:18:51

其中涉及到很多手动步骤,因此很容易遗漏一个。这取决于你是如何导入类型库的,有多种方法可以做到这一点。如果您从Add reference + COM选项卡中选择了引用,那么可能的错误是您忘记了重新注册新的COM服务器。或者您意外地选择了旧的guids而不是新的guids,当您像应该的那样更改guids时,可能会发生这种情况,并且忘记清理旧的guids。清理工作非常重要,而且很容易被忽略,因为它需要在重新构建COM服务器之前完成。你可能会在注册表中得到大量的垃圾。

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

让麻烦尽可能少的秘诀可能是这样的:

  1. 首先取消注册旧的COM服务器,方法是运行regsvr.exe -u
  2. 删除旧的DLL和TLB文件
  3. 更改IDL以添加新方法
  4. 为您更改的接口分配新的IID <

>h19为使用CLSID库的coclass分配新的CLSID输出DLL的名称,赞成在名称中包含major+minor版本使用regsvr32.exe

  1. Run
  2. 生成新的COM server
  3. Register服务器要生成互操作引用,请在.NET项目中引用旧的互操作库
  4. 使用Add reference +
  5. 添加新的互操作库

跳过这些步骤中的任何一个都可能引发构建麻烦,注册表污染,DLL地狱,并有一个全面糟糕的破坏一天没有完成任何事情。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14892080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档