Win7和Win10上的msvbvm60.dll的不同版本

Ant*_*ers 6 vb6

我们有一个遗留的VB6应用程序在Windows 10上的某个点崩溃,但在Windows 7上没有崩溃.它也不会在通过VB6 IDE(在任一操作系统上)运行时崩溃.

在尝试追踪差异时,我发现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
Run Code Online (Sandbox Code Playgroud)

ACa*_*ove 0

所以额外的行也许很重要。但你的代码中的某个地方是一个递归函数。这是我的一个程序,它将 NTStatus 代码转换为 Windows 错误代码。

堆栈是存储函数的局部变量、临时变量、函数参数、返回值和返回地址的地方。程序以 1 MB 的堆栈空间开始,末尾有一个保护页。当堆栈增长到保护页时,虚拟内存管理器会引发内存异常,它将堆栈增加 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   
---------------------------
Run Code Online (Sandbox Code Playgroud)