VB6: 名称与现有模块、项目或对象库冲突

8
打开VB6项目时,我遇到了如下错误:
“加载期间出错。请参考xyz.LOG”
我打开日志文件并看到如下错误:
“第42行:控件XYZ的Threed.SSPanel类不是已加载的控件类。”
在这种情况下,我可以看出问题是由于Sheridan 3D控件引起的:C:\WINDOWS\system32\THREED32.OCX
我认为该项目缺少组件,因此,VB6 > 项目 > 组件 > 选中Sheridan 3D控件并得到了以下错误:
“---------------------- Microsoft Visual Basic ---------------------------
名称与现有模块,项目或对象库冲突
--------------------------- 确定 帮助 ---------------------------”
3个回答

7
我将为您提供最佳的解决方法。我尝试了很多方法,但这是处理问题最好的方法。
关闭该项目。右键单击VB项目并用记事本打开(而不是VB)。此项目文件仅包含有关在项目中使用的表单和模块的所有引用、库和信息。
现在只需通过删除整行来删除导致问题的冲突模块或组件文件。保存并关闭它,现在打开该项目并添加组件。我向您发誓,您不会再遇到那个错误。
谢谢。享受吧。

但是如果没有确定问题/冲突组件,您如何知道从项目文件中删除哪个组件? - Jeremy Thompson
当您打开项目的表单时,您可以识别缺失的组件。缺失组件的控件将被转换为picturebox并显示错误信息。 - Srinivasan
不过如果你继承了这个项目,而现在已经不知道它们是什么了,那就不行。但是我理解你的观点。 - Jeremy Thompson
它在我使用Windows 10时有效,我遇到了与mscomctl.ocx相同的问题。 - jefissu

3
解决此问题的方法是启动一个新的VB6项目,选择“项目菜单组件”,勾选受影响项目中已选择的组件,直到出现错误。
---------------------- Microsoft Visual Basic --------------------------- 名称与现有模块、项目或对象库冲突 ---------------------------确定 帮助 ---------------------------
你需要将冲突的OCX缩小到两个。
在我的情况下,我将其缩小到Sheridan 3D控件/THREED32.OCX和Outrider旋转控件/SPIN32.ocx。
为了解决问题,我使用RegSvr32取消注册OCXs - 确保使用/u标志进行取消注册。
REGSVR32 "C:\WINDOWS\system32\THREED32.OCX" /u   

我随后将OCX文件复制到项目文件夹中,并使用以下命令重新注册它们:
REGSVR32 "C:\Dev\Project\THREED32.OCX"

在存在问题的项目中 > 项目菜单组件 > 在列表框中选择Sheridan 3D控件/THREED32.ocx(如果不选会出现错误或无法取消已选的冲突项,因为它正在使用中) > 点击浏览并从项目文件夹而不是C:\WINDOWS\system32\中引用它。


另一个窍门是关闭项目并注销受影响的ocx - 确保您使用/u标志对其进行注销,例如

RegSvr32 "c:\Windows\system32\mscomctl.ocx" /u   

接着打开项目 > 组件 > 你应该能看到 "Microsoft Windows Common Controls 6.0 (SP6)" 正在使用的是 C:...\Microsoft Vi..\VB98\mscomctl.ocx 文件中的 OCX 文件,而不是 c:\Windows\system32\mscomctl.ocx。

这样项目就可以加载而没有出现错误了:

Errors during load. Refer to xyz.LOG

0

尝试取消勾选最新的对象库/引用,然后再次勾选并选择所需的引用(vb6有一些错误可以通过反向过程来解决)。我使用这个过程解决了提到的错误。


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