VB 6 se bloquea en la salida
Tengo una aplicación vb6 heredada que se bloquea al salir, tanto como ejecutable como en el IDE. ¿Cómo puedo evitar el choque?
Actualmente estoy descargando los formularios (excepto el frmmain) enform_unload
, liberando todos los RecordSets de ADODB, configurando todas las colecciones con límite = nada.He intentadoSetErrorMode SEM_NOGPFAULTERRORBOX
en elform_terminate
evento y eso no ha detenido el error. También he comprobado las instancias de subclases en mi código y no he encontrado ninguna. He revisado los componentes externos a Microsoft que se usan: son el componente 8 de ortografía 8 y el control de tamaño ComponentOne. Una extensa búsqueda en la web y en el foro no ha revelado ningún problema conocido similar al mío para estos controles. El problema no parece ocurrir si apago el programa antes de hacer algo. Sin embargo, la carga de los controles enlazados parece estar cerca de donde se origina el problema, a pesar de pisar repetidamente con el depurador, parece que el inicio del problema "se mueve". El problema ocurre con la salida programática, la "X" y el control "final" IDE. El mensaje de error esThe instruction at "0x77d042b8" referenced memory at "0x055c9028". The memory could not be "Read"
. El título en el cuadro de error es una sugerencia de herramienta (que difiere en diferentes momentos) desde el interior de mi aplicación. He puesto interrupciones al recorrer el código: la aplicación se bloquea en la sublínea de salida en el evento Form_Unload
ADICIONA
Me di cuenta de que debería haber incluido alguna otra información con mi publicación original. Estaba muy cansada y frustrada cuando lo logré y lamento que fuera tan difícil de leer.
Ahor
1) Tengo instalado el último service pack (6) y las últimas compilaciones de los componentes
2) haciendo una depuración en mi ide VS2010 (que está en el mismo servidor) Obtuve un volcado de pila muy largo que comienza con OLEAUT32.dll, actualicé esa DLL pero no encontré ningún cambio
3) Realmente estoy ejecutando (y trabajando en) el programa a través de una conexión de escritorio remoto. El programa se bloquea en mi escritorio y en las conexiones del servidor de terminal de los usuarios.
4) El sistema operativo con el que estoy ejecutando es Windows Server 2003
5) el código que estoy ejecutando es
'código'
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) He agregado una rutina de "salida" en el módulo de inicio con la esperanza de que permita que el objeto de formulario se cierre limpiamente. Esto no solucionó el problema
Muchas gracias a todos por su ayud