【发布时间】:2012-10-29 19:38:53
【问题描述】:
虽然我在做 VB6 开发,但我认为这是一个更广泛的问题。我发现有时在 VB IDE 中会出现错误:[BadImplementsRefInCompatLib]。使用 Matt Curland 的“Advanced Visual Basic 6”附带的类型库查看器,它会标记出我的组件中的类型库引用了它无法找到的类型库,但不是它。当 TLI 组件试图找出在另一个类型库中定义的接口时,潜在的错误是它。
我还尝试了 OLE View - 尝试反向编译 IDL - 但再次尝试获取外部类型时,它给出了错误消息,但没有识别错误值。
我将实际错误追溯到注册表中指向组件的类型库引用,但主要版本不正确。更换主要版本解决了这个问题。
我使用二进制编辑器查看是否可以发现类型库中正在使用的信息。事实上,我找到了它引用的组件的名称(没有路径),但我无法确定格式。我实际上希望找到一个类型库 GUID 和版本号的表。我想我可以编写代码来提取这些名称,并消除“工作”引用,但这有点粗糙。
有人知道类型库如何引用外部类型吗?
【问题讨论】:
-
类型库有一个版本号是有充分理由的。您可以编辑此问题,但是当您调用已更改的过程时,只会在运行时产生无法诊断的故障。只有获取并注册正确的类型库才是解决之道。
-
@HansPassant - 我完全理解类型库版本控制的意义。不幸的是,TLI 组件的行为不是很有帮助 - 它引发了一个错误,但没有提供有关 为什么 它无法解析引用的某种形式的信息,因此我可以采取适当的措施。目前,我不得不猜测为什么它没有奏效!
标签: visual-c++ vb6 typelib