我有一个旧的VB6应用程序,它使用COMCTL32.OCX中的ImageList控件(“Microsoft Windows Common Controls 5.0(SP2)”)为TreeViews和ListViews提供图标。
该应用甚至不会在Windows 7.0 64位上启动。它试图加载具有ImageList的表单的那一刻,就会崩溃(实际上,应用程序会眨眼,退出而没有任何痕迹)。
从表单中删除ImageList可以解决问题。
有什么想法吗?
答案 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