代码之家  ›  专栏  ›  技术社区  ›  sven

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

  •  6
  • sven  · 技术社区  · 17 年前

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

    该应用甚至不会在64位Windows 7.0上启动。当它试图加载带有ImageList的表单时,它崩溃了(实际上,应用程序会闪烁,退出时没有任何痕迹)。

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

    有什么想法吗?

    5 回复  |  直到 17 年前
        1
  •  10
  •   sven    17 年前

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

    微软知识库文章 190952 有这样做的说明。这几乎只是一个全局搜索和替换操作。

        2
  •  2
  •   MarkJ    17 年前

    still supported 在64位Windows7上。COMCTL32.ocx未随Windows 7一起安装,但已安装 explicitly listed 在Windows 7上受支持。

        3
  •  2
  •   user97863    16 年前

    你的解决方案是好的。 但无论如何,COMCTL32.OCX在Win64(Vista或7)上都应该可以正常工作。

    只是一个小小的建议:

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

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

        4
  •  1
  •   C-Pound Guru    17 年前

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

    bcdedit.exe /set {current} nx AlwaysOff
    

    在命令行中输入上述命令后重新启动。记住重新打开它,因为它相当于穿着裤子跑窗户。

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

        5
  •  1
  •   AnthonyWJones    17 年前

    一个不太激烈的DEP调整是进入“计算机性能”对话框(系统属性的“高级”选项卡),并将apps exe添加到“DEP”选项卡上的异常列表中。