【发布时间】:2011-06-15 20:05:42
【问题描述】:
我有一个旧版 vb6 应用程序在退出时崩溃 - 无论是作为可执行文件还是在 IDE 中。如何避免崩溃?
- 我目前正在卸载
form_unload中的表单(除了frmmain),释放所有ADODB 记录集,设置所有boundcollections = 无。 - 我试图在
form_terminate事件中SetErrorMode SEM_NOGPFAULTERRORBOX并没有阻止错误的发生。 - 我还检查了在我的代码中实例化的子类,但没有找到。
- 我已经检查了 Microsoft 外部使用的组件 - 它们是 ComponentOne flexgrid 8 拼写 8 和 ComponentOne sizer 控件。广泛的网络和论坛搜索没有发现任何与我的这些控件类似的已知问题。
如果我在实际执行任何操作之前关闭程序,似乎不会出现此问题。然而,加载绑定控件似乎接近问题的根源,尽管反复使用调试器进行步进,但问题的开始似乎“四处移动”。程序退出、“X”和 IDE“结束”控件出现问题
错误信息是
The instruction at "0x77d042b8" referenced memory at "0x055c9028". The memory could not be "Read"。错误框中的标题是来自我的应用程序内部的工具提示(在不同时间有所不同)
我在单步执行代码时设置了中断 - 应用程序在 Form_Unload 事件的退出子行上崩溃
添加
我意识到我应该在我的原始帖子中包含一些其他信息。当我完成它时我感到非常疲倦和沮丧,很抱歉它很难阅读。
现在
1) 我确实安装了最新的服务包 (6),以及组件的最新版本
2) 在我的 VS2010 ide 中进行调试(在同一台服务器上)我得到了一个以 OLEAUT32.dll 开头的很长的堆栈转储,我更新了那个 DLL 但没有发现任何变化
3)我实际上是通过远程桌面连接运行(和处理)程序。该程序在我的桌面以及用户终端服务器连接上崩溃。
4) 我运行的操作系统是 Windows Server 2003
5) 我正在运行的代码是
'代码'
Private Sub Form_Unload(Cancel As Integer)
Set rsChild = Nothing
Set rsCaseFile = Nothing
' many similar record sets closing
ys.CloseConnection
Set ys = Nothing
UnloadAllForms (Me.Name)
' closeing bound collections
Set bndChild = Nothing
Set bndAuth = Nothing
' more bound collections closed
' i had added the next two lines but it made no difference
frmmain.close
Set frmMain = nothing
getout
end sub
Public Sub UnloadAllForms(Optional FormToIgnore As String = "")
Dim f As Form
For Each f In Forms
If Not f Is Nothing Then
If f.Name <> FormToIgnore Then
Unload f
Set f = Nothing
End If
End If
Next f
End Sub
'\code'
6)我在启动模块中添加了一个“getout”例程,希望可以让表单对象干净地关闭这并没有解决问题
非常感谢大家的帮助
【问题讨论】:
-
能贴出你关机时运行的代码吗?
-
哇,一个段落中有很多密集的文本供人们免费阅读和理解......在格式化文本以使其可读方面可能需要付出一些努力
-
@p.campbell 问题就在第一句“我的 vb6 应用程序在退出时崩溃 - 无论是作为可执行文件还是在 IDE 中。”它的意思是“我怎样才能避免崩溃”! @Jarrod这是一个措辞很好的问题,只是需要一些格式。我会编辑它。如果您自己编辑它,将来它可能对新手更友好? @Close 选民和反对票。没有冒犯,但是你怎么了?这是一个明确的问题。这很长,但那是因为 IronHead 在研究这个问题方面做得很好。它不是“过于本地化”。 +1 问题,如果关闭,我将投票重新开放。
-
@p.campbell 好的,只是为了你,我将再次编辑问题并添加“如何避免崩溃?”。如果你真的需要被告知他不希望他的程序崩溃。 IronHead无法发布代码,因为他有一个大型程序,而且他不知道哪个部分导致了崩溃。它不一定是程序退出时运行的代码,很可能早期的一些内存损坏/错误指针仅在退出时出现。我向你保证,这是一个很好的问题。 FWIW 我有some VB6 stats around here