我们有一个遗留的VB6应用程序,它在Windows10上的某个时候崩溃了,但在Windows7上没有崩溃。当通过VB6集成开发环境运行时,它也不会崩溃(在任一操作系统上)。
在试图追踪这些差异时,我发现msvbvm60.dll在Win7和Win10上有细微的不同。具体来说,它具有相同的版本号和大小,但日期不同。随后的二进制比较表明,版本确实不同。
如果我们强制Win10机器使用Win7版本的msvbvm60.dll,崩溃就会得到修复。有没有人能解释一下这些版本之间的区别?我已经确认,这两个版本与您在干净安装的Win7和Win10上获得的版本相同,因此不是由于任何损坏。
尝试在网格(MSFlxGrd.ocx)上显示信息时发生崩溃。然而,网格在大多数情况下都是有效的。数据集比平时大,但只有8000行,所以不算极端。应用程序非常复杂,因此不容易检查数据或提供更多信息。
系统事件日志显示以下内容:
Faulting module name: MSVBVM60.DLL, version: 6.0.98.15, time stamp: 0x49b01fc3
Exception code: 0xc00000fd
发布于 2018-02-28 04:39:57
因此,额外的行数可能会被计算在内。但是在你的代码中有一个递归函数。这是我的一个将NTStatus代码转换成Windows错误代码的程序。
堆栈是存储函数的局部变量、临时变量、函数的参数、返回值和返回地址的地方。一个程序以1 MByte的堆栈空间开始,最后是一个保护页。当堆栈增长到保护页时,虚拟内存管理器会引发内存异常,使堆栈增长4KByte,并放入一个新的保护页。堆栈已命中不可用且无法增长的内存。
---------------------------
Serenity's Unicode Text Editor
---------------------------
NT Status 0xC00000FD (-1073741571)
Windows Error 0x3E9 (1001)
---------------------------
NT Status Message:
A new guard page for the stack cannot be created.
---------------------------
Windows Error Message:
Recursion too deep; the stack overflowed.
---------------------------
OK
---------------------------
发布于 2020-07-29 15:35:28
我在Windows10和MSFlxGrd.ocx上遇到了一些问题。这些问题显示为“许可错误”,尽管我认为ocx是随vb6一起提供的。无论如何,当我运行以下zip文件中的exe时,所有这些问题都消失了(在运行它之前,解压缩文件夹中的所有文件)。
首先,关闭visual basic (如果打开)。然后使用unzip this file,然后在其中运行exe文件
https://stackoverflow.com/questions/48991738
复制相似问题