【发布时间】:2013-03-24 04:15:53
【问题描述】:
当我尝试重建我的一个 VB6 DLL 时,我收到一条警告:
"二进制兼容性 DLL 或 EXE 包含参数类型或 找不到定义的返回类型”
我必须在选定的 DLL 中发布一些更改(方法内部的简单更改 - 根据 this 没有任何破坏兼容性)
我遵循的普遍接受的方法是将旧 DLL 维护在单独的共享目录中,并在制作新 DLL 时,将它们编译为设置为旧 DLL 集的二进制兼容性。这样做是为了在我注册新的 DLL 时不更改 GUID。这些 GUID 用作其他 DLL 中的引用,我在发布期间没有干扰。
我很确定我没有添加任何东西来破坏二进制兼容性规则(签名、公共方法、变量等没有变化)为什么会出现这个错误?
不检查基本的东西我是菜鸟吗?从早上开始就挠头。非常感谢任何帮助。
编辑:如果我的签名有任何变化,有没有一种方法可以在不比较代码的情况下知道?
【问题讨论】:
-
您的代码可能较早地破坏了兼容性。当您添加任何新的公共方法或属性时,VB6 不会发出警告,但后续编译会创建不同的类型库 - 因为您的参考 DLL 尚不包含此新方法。 (我经常将 dll 兼容性设置为 dll 本身。)我认为(但没有经历过)特定消息(......找不到定义)可能表明项目引用发生了一些变化,或者您已经卸载/取消注册了一些其他组件来自您的系统。
-
您的二进制兼容性目标使用了未在构建机器上正确注册的外部类型库(可能是另一个 VB6 项目)中的类型,或者是新/旧不兼容版本。
-
@Arvo - 是的,代码可能更早损坏。在这种情况下,应该至少有两个类型库(一个用于中断前,一个用于中断后)。但我的注册表只包含一个
-
@wqw 实际上我在同一台机器上进行构建。我怀疑有问题的 DLL 引用的某些类型可能有问题。但是当单独构建时,它们根本不会给我带来任何问题。
标签: vb6 dll binary-compatibility