VB6完全编译时出现用户定义类型未定义错误

6
我有一些VB6代码已经很久没有编译了。最后一次编译是在生产环境中。现在当我进行完整的编译时,出现一个错误"用户定义类型未定义"。我确定缺少一个引用。但是没有任何被高亮显示的代码。我找不到可能丢失的参考资料。
如果您有任何线索可以帮助我找到缺失的引用,那将非常有帮助。
谢谢!
Dave

2
你尝试过使用 Option Explicit On 吗? - Shahzeb
1
你能把你的变量定义粘贴给我们吗?这将有助于确定所需的引用(如果有)。 - ZnArK
1
这是一个大约有250个表单、类和模块的项目。如果我能够缩小代码范围,只发布有问题的部分,那就太好了。但是没有办法做到这一点。是的,在所有地方都打开了Option Explicit选项。 - An Old Guy and His Dog
尝试使用 find /I "Dim " *,这将给出所有变量声明。筛选出唯一的变量并从那里开始逐步排除。你有“最后已知良好”配置以比较任何更改吗? - ZnArK
好的...我明白你在问什么,但不确定如何执行查找/I操作。我知道vb6的查找对话框...我该如何输入命令?立即窗口返回一个错误。谢谢你的帮助! - An Old Guy and His Dog
显示剩余2条评论
4个回答

4

我之前也遇到过同样的问题,让我很是苦恼!! 不过后来我找到了这个解决方案:

http://support.microsoft.com/kb/190197

编译时使用二进制兼容性会导致此问题。上述解决方案建议关闭二进制兼容性并重新编译——然后缺少的引用就会被突出显示。

您可以尝试其他步骤:

  • 不要为所有内容都关闭BC,而是寻找最近更改的内容
  • 搜索C:驱动器和dev文件夹,删除任何*.oca文件
  • 还要查看vbp文件中是否有oca引用

1
你也可能会在覆盖二进制文件时遇到问题,特别是当它作为兼容性参考时。将最近构建的发行版二进制文件复制到另一个文件夹中,并在该文件上设置兼容性。 - Matt Wilko
微软有将东西移动或删除的倾向。上面的链接已经失效了。 - CTZStef

3

您需要确保在“References”对话框中选中了适当的项目。这些项目是在VBP文件(文本文件)中列出的,与代码无关。

编辑:修正了参考存储方式。感谢MarkJ


是的...问题在于已经有大约40个项目被选中,还有很多没有被选中。而且错误没有给我更多的信息。我正在寻找一种定位缺失引用的方法。 - An Old Guy and His Dog
1
参考窗口可能带有“(缺失)”后缀。 - Deanna
1
引用是由IDE以某种方式处理的:它们在VBP文件中列出,这是一个文本文件如VB6手册所述。您是否将VBP纳入版本控制?您能否查看用于构建最后一次编译的VBP,并查看是否引用了某些现在未被引用的内容? - MarkJ

0

确保您的所有对象类型都拼写正确。即使是像将 Variant 拼写成 Varient 这样的简单错误也可能导致此错误。


但它应该突出显示它。 - Deanna
Office 2007(它没有突出显示) - leeand00

0
你仍然在使用原始编译所用的相同计算机和/或相同的操作系统吗?
如果答案是否定的,那么有可能VB6或其类似版本链接到Win7或更高版本中不再可用的引用,这也可能包括编译器,如果您正在使用现代版本的工作室。
由于代码也是用VB6编写的,如果您使用任何外部商业控件,并且不在同一台计算机上,则如果您没有移植库,则会丢失这些链接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接