7

我有一个旧的 VB6 应用程序,它使用 COMCTL32.OCX 中的 ImageList 控件(“Microsoft Windows Common Controls 5.0 (SP2)”)为 TreeViews 和 ListViews 提供图标。

该应用程序甚至无法在 Windows 7.0 64 位上启动。它尝试加载具有 ImageList 的表单的那一刻,它崩溃了(实际上,应用程序眨眼,退出而无影无踪)。

从表单中删除 ImageList 可以解决问题。

有任何想法吗?

4

5 回答 5

10

我通过将 VB5 附带的所有 COMCTL32.OCX 实例替换为 VB6 附带的 MSCOMCTL.OCX 解决了这个问题。

Microsoft 知识库文章190952提供了执行此操作的说明。这几乎只是一个全局搜索和替换操作。

于 2009-06-19T19:28:29.950 回答
2

向 Microsoft 报告错误。VB6 运行时在 64 位 Windows 7 上仍受支持。COMCTL32.ocx 未随 Windows 7 一起安装,但在 Windows 7 上被明确列为受支持。

于 2009-06-19T18:50:05.797 回答
2

你的解决方案没问题。但是 COMCTL32.OCX 在 Win64 上应该可以正常工作(Vista 或 7)。

只是一点建议:

如果使用 MSCOMCTL.OCX,您将无法将 XP/Vista/7 样式应用于您的列表视图或树视图,并且您的应用程序可能看起来很陌生。清单不会对 MSCOMCTL.OCX 控件产生任何影响。

一种解决方法是对 MSCOMCTL.OCX 控件进行子类化,并且由于它们仍然包含 COMCTL32.DLL 标头,因此您可以操纵它的绘制方式。

(我会作为评论发布,但我仍然不能)

于 2010-02-21T00:18:38.260 回答
1

一个不太激烈的 DEP 调整是进入计算机性能对话框(系统属性的高级选项卡)并将应用程序 exe 添加到 DEP 选项卡上的例外列表中。

顺便说一句,你确定这不属于 serverfault.com。:P

于 2009-06-19T17:53:36.370 回答
1

您可能会遇到数据执行保护 (DEP) 的问题。通过禁用 DEP 进行测试:

bcdedit.exe /set {current} nx AlwaysOff

在命令行中输入以上内容后重新启动。请记住将其重新打开,因为它相当于脱下裤子运行 Windows。

编辑:上面的命令适用于 Vista。我还没有在 Windows 7 上尝试过。

于 2009-06-19T17:01:21.647 回答