VB6 Timer(),Space()Form_Initialize()导致立即崩溃

时间:2011-12-13 16:12:39

标签: windows-7 vb6 windows-xp 32-bit

创建一个新的VB6项目。将以下代码粘贴为项目代码。命中运行。看它是否崩溃...在此代码中删除或简化您喜欢的任何内容,然后它将正常工作。 任何人都可以详细说明为什么会崩溃吗?

到目前为止,已经在8台PC上进行了测试,所有这些都运行Windows XP,Windows Vista,Windows 7,Office 2010和Office 2007的各种组合。在Visual Basic IDE中测试它的是Visual Basic 6 SP 6安装。

Private Sub Sleep(ByVal nSeconds As Long)
    Dim nStart As Long: nStart = Timer
    Do
        DoEvents
    Loop Until (Timer - nStart) >= nSeconds
End Sub

Private Sub Crash()
    Dim sTempPath As String: sTempPath = Space(255)
End Sub

Private Sub Form_Initialize()
    Sleep 1
    Crash
End Sub


附录#1:

我将此作为宏放在Excel 2010中,将Form_Initialize()替换为Workbook_Open(),当然,当您打开文档时。它崩溃了!

附录#2:

我在点击“运行”之前向每一行添加了断点,并在它到达第一个断点之前崩溃了。但同样,如果我简化或删除任何内容,它工作正常,不会崩溃。

附录#3:

尝试过MicSim删除冒号的建议,但没有崩溃。添加它,再次运行它并且崩溃。关闭Visual Basic,并输入原始代码并将其崩溃。

附录#4:

Visual Basic 6 IDE中的问题详细信息:

  

问题签名:
   问题事件名称:APPCRASH
   应用程序名称:VB6.EXE
   应用版本:6.0.81.76
   申请时间戳:3592011f
   故障模块名称:VBA6.dll
   故障模块版本:6.0.0.8169
   故障模块时间戳:358b0c74
   例外代码:c0000005
   异常抵消:00026329
   操作系统版本:6.1.7601.2.1.0.256.4
   地区ID:1033
   附加信息1:7e3b
   附加信息2:7e3beb1e9ccf6d519c5b994ca59a280f
   附加信息3:7b83
   附加信息4:7b833c57ebcf54809fd3aaccd8ea4f46
  
  在线阅读我们的隐私声明:
   http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409
  
  如果没有在线隐私声明,请离线阅读我们的隐私声明:
   C:\ WINDOWS \ SYSTEM32 \ EN-US \ erofflps.txt

附录#5:

Microsoft Excel 2010中的问题详细信息:

  

问题签名:
   问题事件名称:APPCRASH
   应用程序名称:EXCEL.EXE
   应用版本:14.0.4756.1000
   申请时间戳:4b9c08e8
   故障模块名称:VBE7.DLL
   故障模块版本:7.0.15.90
   故障模块时间戳:4b7b1248
   例外代码:c0000005
   异常抵消:00045b6a
   操作系统版本:6.1.7601.2.1.0.256.4
   地区ID:1033
  
  有关此问题的其他信息:
   LCID:1033
   skulcid:1033
  
  在线阅读我们的隐私声明:
   http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409
  
  如果没有在线隐私声明,请离线阅读我们的隐私声明:
   C:\ WINDOWS \ SYSTEM32 \ EN-US \ erofflps.txt

Screenshot after hitting Run, or Build

1 个答案:

答案 0 :(得分:5)

在审核了您的问题和所有附录后,我意识到您的计算机正在运行VB6的发布版本,而不是 SP6。

您的崩溃详细信息表明以下版本:

  • VB6.exe:6.0.81.76
  • VBA6.dll:6.0.0.8179

Visual Basic 6.0 SP6文件的确切内部版本号如下:

  • VB6.exe:6.0.97.82
  • VBA6.dll:6.0.0.9782

异常代码c0000005对应于模块vba6.dll中的访问冲突。 Microsoft KB

中记录了类似的问题

我没有找到准确的源列出每个VB6服务包的内部版本号,但看起来这是RTM version。即使您自己安装了SP6,但在安装Service Pack之后,恶意安装程序可能会覆盖旧版本的共享系统文件。这可以解释为什么许多用户评论说代码在看似相似的设置下工作正常。