虽然我在做VB6开发,但我认为这是一个更广泛的问题。我发现有时在VB IDE中会出现一个错误:[BadImplementsRefInCompatLib]。使用Matt Curland的“高级Visual Basic 6”附带的类型库查看器,它标志着我的组件中的类型库有一个它找不到的类型库的引用,但不是它是什么。当TLI组件试图找出在另一个类型库中定义的接口时,底层的错误与TLI组件有关。无效的外部类型库引用(“错误加载DLL”)
我也试过OLE视图 - 尝试并反向编译IDL - 但同样,它在尝试获取外部类型时给出了一条错误消息,而没有标识出错误的值。
我将实际错误追溯回注册表中指向组件的类型库引用,但主要版本不正确。替换主要版本解决了问题。
我使用了二进制编辑器来查看是否可以发现在类型库中使用了哪些信息。事实上,我找到了它引用的组件的名称(没有路径),但我无法制定出格式。我实际上希望找到一个类型库GUID和版本号的表。我想我可以编写代码来提取这些名称,并消除“工作”引用,但这有点粗糙。
有谁知道类型库如何引用外部类型?
类型库有一个版本号有一个很好的理由。您可以编辑此问题,但在调用已更改的过程时,这只会在运行时产生无法识别的故障。只有获得并注册正确的类型库才是解决方案。 –
@HansPassant - 我完全理解版本化类型库的要点。不幸的是,TLI组件的行为并不是非常有用 - 它提供了一个错误,但没有提供某种形式的关于* why的信息*它无法解析引用,所以我可以采取适当的措施。此刻,我必须猜测为什么它没有奏效! –