【问题标题】:Using ImageList from VB6 application causes crash on Windows 7.0 64-bit在 VB6 应用程序中使用 ImageList 会导致 Windows 7.0 64 位崩溃
【发布时间】:2009-06-19 16:47:09
【问题描述】:

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

该应用程序甚至无法在 Windows 7.0 64 位上启动。当它尝试加载上面有 ImageList 的表单时,它就崩溃了(实际上,应用程序突然消失了,无影无踪地退出了)。

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

有什么想法吗?

【问题讨论】:

  • 不知道,除了向微软报告。其次,可以通过证明单张图片的作品来缩小范围。

标签: vb6 listview treeview win64 imagelist


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      一点建议:

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

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

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

      【讨论】:

        【解决方案4】:

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

        bcdedit.exe /set {current} nx AlwaysOff
        

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

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

        【讨论】:

        • +1 是的,听起来像经典的 DEP,绝对是第一个停靠港。
        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-13
          相关资源
          最近更新 更多