Win7和Win10不同版本的msvbvm60.dll

Posted

技术标签:

【中文标题】Win7和Win10不同版本的msvbvm60.dll【英文标题】:Different versions of msvbvm60.dll on Win7 and Win10 【发布时间】:2018-08-06 02:24:32 【问题描述】:

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

在尝试找出差异时,我发现 msvbvm60.dll 在 Win7 和 Win10 上略有不同。具体来说,它具有相同的版本号和大小,但日期不同。随后的二进制比较表明版本确实不同。

如果我们强制Win10机器使用Win7版本的msvbvm60.dll,就修复了crash。任何人都可以阐明这些版本之间的区别吗?我已经确认这两个版本和你全新安装的 Win7 和 Win10 是一样的,所以不是因为任何损坏。

尝试在网格 (MSFlxGrd.ocx) 上显示信息时发生崩溃。但是,网格大部分时间都有效。数据集比平时大,但只有 8000 行,所以不算极端。该应用程序非常复杂,因此检查数据或提供更多信息并不容易。

系统事件日志显示如下:

Faulting module name: MSVBVM60.DLL, version: 6.0.98.15, time stamp: 0x49b01fc3
Exception code: 0xc00000fd

【问题讨论】:

你提到了二进制比较——除了时间戳不同之外,它们是不同的吗? (例如,它只是因为时间戳而不同) 很有趣,但我有大约 99% 的把握,除了微软,没有人能回答这个问题。 我应该补充一点,如果您的意图是确定问题是否被其他人观察到,最好有一个 MVCE,以便您可以独立确认是否存在问题。当您决定加入 Microsoft 时,这会为您提供支持。 Wrt二进制比较,我的意思是HxD显示文件确实不同,所以不仅仅是时间戳。 根据我的经验,在 Win 10 上重新编译以修复。 【参考方案1】:

所以额外的行数可能会计算在内。但是在您的代码中的某个地方是一个递归函数。这是我的一个将 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   
---------------------------

【讨论】:

【参考方案2】:

我在 Windows 10 中遇到了 MSFlxGrd.ocx 问题。这些问题显示为“许可证错误”,尽管我认为 ocx 是随 vb6 提供的。无论如何,当我在以下 zip 文件中运行 exe 时,所有这些问题都消失了(在运行之前解压缩文件夹中的所有文件)。

首先,如果打开,请关闭 Visual Basic。然后unzip this file,然后运行里面的exe文件

【讨论】:

以上是关于Win7和Win10不同版本的msvbvm60.dll的主要内容,如果未能解决你的问题,请参考以下文章

Win7停止更新升Win10教程

vs哪个版本适合win7 win7各个版本的区别

高分求救:win7下安装oracle出错!!

怎么在win7下安装最新ubuntu系统

win10不提示发现新硬件怎么办?

求IE10 11版本的 win7 32位系统的独立离线安装包