26

我被要求帮助某人处理旧版 vb6 应用程序,因此我决定按照本指南在我的 Windows 7 x64 笔记本电脑上使用 Visual Studio 6 。

它安装得很好,我可以看到除了 Microsoft Windows Common Controls 6.0 (sp6) 之外的一切都正常工作。Microsoft Windows Common Controls-2 6.0 (sp6)、Microsoft Windows Common Controls 5.0 (sp2) 等都可以正常工作。但是,当我尝试添加 Microsoft Windows Common Controls 6.0 (sp6) 组件时出现错误:

'' could not be loaded

我无法添加图像,因此我已将屏幕截图上传到此处,供任何想准确查看的人使用:

http://i.imgur.com/7aym4xB.png

我尝试注册/取消注册/重新注册 MXCOMCTL.OCX、MSCOMCT2.OCX、msdatsrc.tlb 均未成功。我还卸载了可能导致 Windows 通用控件出现问题的已知安全更新。我已经删除了 IE11,即使报告指出 IE11 不会像 IE10 那样导致 MSCOMCTL.OCX 出现问题。

我在 Windows XP SP3 兼容模式下运行 VB6.EXE。使用禁用视觉主题、禁用桌面合成和禁用高 DPI 设置的显示缩放。以及以管理员身份运行它。

我还尝试打开一个使用此控件的先前项目,但它在加载过程中失败,并出现与屏幕截图中相同的“空白”错误,生成的错误日志中显示以下内容:

第 35 行:控件 lvData 的类 MSComctlLib.ListView 不是加载的控件类。第 223 行:控件 Stat 的类 MSComctlLib.StatusBar 不是已加载的控件类。

所以这告诉我这不是 .vbp 中的版本问题,就像一些建议的那样(新的空白项目也会发生这种情况)。

我束手无策。显然人们已经让 VB6 和 Windows 7 x64 都能正常工作(使用 Windows 通用控件),但我没有尝试任何方法来缓解我的问题。我希望这里有人可能遇到过这种情况,或者对发生的事情有一些想法。

4

13 回答 13

50

在等待这里的想法回复时,我决定尝试一些东西。我以管理员身份运行 regedit,导航到 HKEY_CLASSES_ROOT\TypeLib 键,然后搜索“MSCOMCTL.OCX”...我删除了引用此 .ocx 文件的每个键。

在搜索了整个注册表,删除了我找到的内容后,我以管理员身份运行了命令提示符。然后我导航到 C:\Windows\SysWOW64 并键入以下命令:

regsvr32 MSCOMCTL.OCX
regtlib msdatsrc.tlb

再次注册这两个文件后,一切正常!我在网上搜索了 HOURS 来寻找这个解决方案,但无济于事。碰巧我在这里发布问题后自己修复了它:(即使 Visual Studio 6 已经过时,希望这仍然可以帮助其他人!

于 2013-12-23T04:53:09.627 回答
11

在“C:\Windows\SysWOW64”中实现这两个指令已经对我有用

regsvr32 MSCOMCTL.OCX
regtlib msdatsrc.tlb

值得注意的是,DOS 框应处于管理员模式。在此之前,我一直在“控件 tvTreeView 的 MSComctlLib.TreeView 类不是加载的控件类”和“控件 lvListView 的类 MSComctlLib.ListView 不是加载的控件类”中遇到错误。

我还在 64 位 Windows 7 上使用 Visual Studio 6,并带有 SP6 更新。由于同样的问题,我被带到这里。就我而言,我不需要通过注册表。

于 2014-01-28T04:04:40.170 回答
3

我已经在这个问题上搜索了几个小时并点击了数百个网站,但没有一个有效。

我的最终解决方案:

  1. 运行:cmd
  2. cd c:\Windows\SysWOW64(定位到该位置)
  3. regsvr32 MSCOMCTL.OCX

这解决了第一个问题。对于第二个:

  1. 运行:cmd
  2. cd c:\Windows\Microsoft.NET\Framework\v4.0.30319
  3. regtlibv12 msdatsrc.tlb

完毕。

这可能不适用于所有人(考虑系统版本原因等)

于 2016-12-01T21:15:22.627 回答
2

我在加载我的 VB 6 项目时遇到了同样的困难。这是一个示例错误消息:“控件 prgExecution 的类 MSComctlLib.ProgressBar 不是已加载的控件类。”

一些 Microsoft Magic 解决了这个问题,如下所示:我在损坏的项目中打开了“项目组件”窗口。我单击浏览并找到文件 MsComctl.ocx。我点击确定。VB 6 然后卡住了(应用程序无响应)。一段时间后,我使用任务管理器结束了 VB 6 应用程序。

然后,神奇地,当我打开我的 VB 6 项目向我的编程朋友展示这个项目是什么 POS 时,所有控件都恢复了,并按预期链接。不知何故,有些东西被注册或修复了。

于 2014-05-28T20:52:01.530 回答
1

就在今天,我有幸(值得怀疑)让 VB6 代码在 Windows/64 位上运行。我确实遇到了这个线程,但没有一个建议的解决方案对我有用。使用“项目-> 参考...”菜单添加参考都不起作用。

为了让它运行,我必须手动修改 VB6 项目文件 (*.vbp)。对于我遇到加载问题的所有库,我必须使用以下符号定义为参考: Object={Registry Key}#Version#0; LIBRARY.OCX 示例:对象={FAEEE763-117E-101B-8933-08002B2F4F5A}#1.1#0; DBLIST32.OCX

我不必注册任何库(使用 regsvr32),这些都已经正确注册。我猜为什么我的解决方案有效,如果使用“object={[...]”表示法(而不是“Reference=*\G{[...]”表示法)VB Studio 仅使用注册表项并植根于 C:\Windows\SysWOW64 而另一种方式最终在 C:\Windows\System32 中查找

顺便说一下,安装了IE11。这是否重要,只有比尔 G 可能知道。我的猜测是,无论安装了哪个 IE,我的解决方案都能正常工作。您可能只需要注销并注册此线程中提到的丢失的库。

希望对遇到类似问题的人有所帮助。

于 2016-09-19T13:56:36.710 回答
1

使用运行命令 regedit 打开注册表编辑器。

找到 HKEY_CLASSES_ROOT\TypeLib 键,然后搜索“MSCOMCTL.OCX”并删除引用此 .ocx 文件的每个键。

在管理员模式下打开命令提示符 (cmd)。键入以下代码,

在 32 位机器中,

cd c:\Windows\System32
regsvr32 MSCOMCTL.OCX
regtlib msdatsrc.tlb
regsvr32 MSCOMCT2.OCX

在 64 位机器中,

cd c:\Windows\SysWOW64
regsvr32 MSCOMCTL.OCX
regtlib msdatsrc.tlb
regsvr32 MSCOMCT2.OCX
于 2018-08-09T13:17:24.483 回答
0

=>正如杰伊所说,只需删除那些指向除 c:\windows\system32 以外的其他路径的注册表项。这些是错误的罪魁祸首。我在我的 vb6 IDE 上遇到了这些错误,并在删除那些异常的注册表项后问题已解决。奇迹般有效。

于 2016-08-02T01:11:04.920 回答
0

简单的解决方案

  1. 创建一个新的空白项目并保存
  2. 使用 NOTEPAD 打开新项目的 .VBP 并复制 MSCOMCTL 行
  3. 使用 NOTEPAD 打开项目的 .VBP 文件
  4. 替换 MSCOMCTL 行并保存

完毕

祝你好运

于 2016-01-28T12:33:41.297 回答
0

我认为这可能与 Microsoft 发布 MScomCtlLib 更新的问题有关,该更新被 Microsoft 错误地修补,导致注册表错误。

我相信如果您遵循以下建议:

https://support.microsoft.com/fr-fr/kb/2597986

于 2016-09-29T14:24:47.357 回答
0

我遇到了同样的问题,但是运行 regsvr32 MSCOMCTL.OCX 时出现错误以下错误

模块“MSCOMCTL.OCX”已加载,但对 DllRegisterServer 的调用失败,错误代码为 0x8002801c。

当我以管理员身份运行 CMD.EXE 时,它解决了我的问题。

有时 VB6.EXE 还需要以管理员身份运行才能访问某些注册表问题。

祝你好运。

于 2016-12-19T10:06:25.173 回答
0

我在使用 VB6 运行 Windows 7-64 时遇到了同样的问题。我尝试了上面的注销和重新注册解决方案,但没有解决问题。然后我注意到在我的 VB6 组件中,我引用了 Microsoft Windows Common Controls -2 6.0(SP6) 和 Microsoft Windows Common Controls -3 6.0(SP5)。我删除了 SP5 参考,现在一切正常。似乎 -2 6.0 SP6 取代了 -3 6.0 (SP5),并且当两者都存在时,有两个对同一控件的引用。希望这可以帮助。史蒂夫

于 2018-08-23T12:09:31.693 回答
0

我的解决方案是将 Windows 10 盒子上的 MSCOMCTL.OCX 替换为 Windows 7 盒子中的一个,该盒子也安装了 MS Access。出于某种原因,有不同的 MSCOMCTL.OCX 2.0 控件具有相同的名称。

我知道这听起来很疯狂,并且可能对其他人没有帮助,但我们已经使用自述文件保存了这个 MSCOMCTL.OCX,它每次都修复了我们的新安装错误。

我们取消注册 Windows 10 框随附的当前 MSCOMCTL.OCX,将其删除,然后注册我们保存的旧版本。

于 2018-09-27T22:58:28.733 回答
0

我遇到了一个问题,即 VB6 IDE 无法在 W7 64 位上安装 VB6 加载常用控件 (Sp6),特别是 comctrl 和 msmask。我尝试了使用 regsrv32(提升)提出的所有解决方案,编辑了注册表,更改了 MS 和其他人提出的 vbp 等中的版本号。都失败了。这些解决方案适用于我的其他 2 台 PC,但不适用于这台。最终我删除了 IE11,之后一切正常。IE10 从未安装在这台 PC 上——我们直接从 IE8 转到 IE11,并被迫回溯到使用 IE8。

我不得不说上面的简单解决方案并没有解决问题,即 VB6 IDE 不会加载公共控件(使用项目下的组件菜单选择) - 你会收到一个错误说对象未加载。因此,这将发生在任何尝试使用无法加载的公共控件的新旧项目上(我向自己证明了这一点)。

所以我对任何有这个问题的人的建议是尝试使用 regsrv32 路由手动注册解决方案,然后编辑 vbp 以更改版本,如果这些失败卸载 IE11(并且肯定是 IE10)。但这可能仍然不是 100% 的解决方案,因为如果您现有的项目文件“.vbp”包含对错误公共控件的引用,您需要手动更正 - 这是加载新项目的地方,在 IDE 中加载您需要的组件,然后使用记事本编辑新创建的 vbp 并将通用控件的版本号复制到现有的 vbp 文件中。

于 2016-02-08T13:48:08.610 回答