我有一个ActiveX COM控件及其源代码。我想更改该方法的输入参数之一,因此我更改了IDL等,并生成了COM DLL和TLB。
但是,当我在.NET项目中导入COM时,该方法保留了它的旧签名。因此,我尝试使用AXIMP生成AXIMP(虽然都是一样的,但我想试一试)。
尽管如此,该方法的签名并没有更改为我更改的签名。
但是,当我从生成的TLB文件中使用TLBIMP生成互操作DLL时,方法签名正确地更改了。
我在哪里会错呢?
谢谢。
发布于 2013-02-15 19:18:51
其中涉及到很多手动步骤,因此很容易遗漏一个。这取决于你是如何导入类型库的,有多种方法可以做到这一点。如果您从Add reference + COM选项卡中选择了引用,那么可能的错误是您忘记了重新注册新的COM服务器。或者您意外地选择了旧的guids而不是新的guids,当您像应该的那样更改guids时,可能会发生这种情况,并且忘记清理旧的guids。清理工作非常重要,而且很容易被忽略,因为它需要在重新构建COM服务器之前完成。你可能会在注册表中得到大量的垃圾。
是的,直接使用Tlbimp.exe是避免事故的最可靠的方法。因为您直接在类型库上运行它,而根本不使用注册表。
让麻烦尽可能少的秘诀可能是这样的:
>h19为使用CLSID库的coclass分配新的CLSID输出DLL的名称,赞成在名称中包含major+minor版本使用regsvr32.exe
跳过这些步骤中的任何一个都可能引发构建麻烦,注册表污染,DLL地狱,并有一个全面糟糕的破坏一天没有完成任何事情。
https://stackoverflow.com/questions/14892080
复制相似问题