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

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

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

有什么想法吗?

有帮助吗?

解决方案

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

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

其他提示

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

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

只是一点建议:

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

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

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

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

bcdedit.exe /set {current} nx AlwaysOff

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top