使用VB6应用程序中的ImageList会导致Windows 7.0 64位崩溃

时间:2009-06-19 16:47:09

标签: vb6 listview treeview win64 imagelist

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

该应用甚至不会在Windows 7.0 64位上启动。它试图加载具有ImageList的表单的那一刻,就会崩溃(实际上,应用程序会眨眼,退出而没有任何痕迹)。

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

有什么想法吗?

5 个答案:

答案 0 :(得分:9)

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

Microsoft知识库文章190952包含执行此操作的说明。它几乎只是一个全球搜索和替换操作。

答案 1 :(得分:2)

向Microsoft报告错误。 64位Windows 7上的VB6运行时为still supported。COMCTL32.ocx未随Windows 7一起安装,但在Windows 7上支持explicitly listed

答案 2 :(得分:2)

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

只是一点建议:

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

解决方法是子类化MSCOMCTL.OCX控件,因为它们仍然包含COMCTL32.DLL标头,您可以操纵它的绘制方式。

(我会发表评论,但我仍然不能)

答案 3 :(得分:1)

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

bcdedit.exe /set {current} nx AlwaysOff

在命令行中输入上述内容后重新启动。记得把它重新打开,因为它相当于用你的裤子来运行Windows。

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

答案 4 :(得分:1)

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

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