在Windows 7.0 64位系统上,使用VB6应用程序中的ImageList会导致崩溃。

7
我有一个使用COMCTL32.OCX(“Microsoft Windows Common Controls 5.0(SP2)”)中的ImageList控件为TreeViews和ListViews提供图标的旧VB6应用程序。但这个应用程序在Windows 7.0 64位上无法启动。一旦它尝试加载具有ImageList的表单,它就会崩溃(实际上,该应用程序会消失,没有任何痕迹)。从表单中删除ImageList可以解决问题。你有什么想法吗?

1
除了向微软报告之外,我没有其他的想法。其次,也许可以通过证明单个图像有效来缩小范围。 - John Saunders
5个回答

10

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

微软KB文章190952中有如何操作的说明。这几乎只是一个全局搜索和替换操作。


2
你的解决方案是可以的。 但是COMCTL32.OCX在Win64上应该也能正常工作(Vista或7)。
只是一个小建议: 如果使用MSCOMCTL.OCX,您将无法将XP/Vista/7样式应用于您的列表视图或树视图,您的应用程序可能看起来很陌生。清单对MSCOMCTL.OCX控件没有任何影响。
解决方法是子类化MSCOMCTL.OCX控件,并且由于它们仍然包含COMCTL32.DLL头文件,因此您可以操作其绘制方式。
(我本来会发表评论的,但我仍然不能)

2

向微软报告错误。在64位Windows 7上仍支持VB6运行时 COMCTL32.ocx在Windows 7中未安装,但明确列出为支持的内容。


1

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

bcdedit.exe /set {current} nx AlwaysOff

在命令行中输入上述内容后重新启动电脑。记得把它打开,因为这相当于裸奔运行Windows。

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


+1 嗯,听起来像是经典的 DEP 问题,肯定是首要解决的地方。 - AnthonyWJones

1
一个不那么激进的 DEP 调整是进入计算机性能对话框(系统属性的高级选项卡),并将应用程序 exe 添加到 DEP 选项卡上的例外列表中。
顺便问一下,你确定这不应该放在 serverfault.com 上吗? :P

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