Autor
|
Tema: Visual Basic 6.0 se cierra sin motivo (Leído 6,326 veces)
|
keef
Desconectado
Mensajes: 70
|
Hola. Desde hace unos 2 meses que vengo experimentando un problema, que no me deja probar el código que escribo en VB en ciertas ocasiones. Pero el problema no tiene relación con el lenguaje o la programación, sino con que a veces, cuando me dirijo a ejecutar el código escrito por mí, la aplicación se cierra sola de manera violenta. He notado que esto solo pasa cuando uso ciertas APIs en el código; Estas APIs las probé en un VB6 instalado en Windows 7 y el problema desaparece, pero yo necesito la aplicación funcional en Windows 10, que es el sistema desde el que escribo ahora y en el que se me presenta este problema. Busqué en Google mi caso, el cual no es tan singular, hay varias personas preguntando lo mismo, pero en el caso de estas, se cierra en otros momentos y bajo otras condiciones, como al abrir un formulario, al compilar, etc. Agradezco cualquier información que me ayude a averiguar el porqué de este problema, que cuando me apareció por primera vez, me sorprendió bastante, puesto que nunca he tenido problemas de este estilo. Uso Windows 10 de 64 bits y, como VB6 está disponible solamente para sistemas 32 bits con algo de antigüedad, tuve que hacer algunos cambios en la carpeta raíz del programa para instalarlo de manera exitosa. Gracias y saludos.
|
|
|
En línea
|
|
|
|
EdePC
|
Has leído los detalles del mensaje de error? normalmente ahí dice el exe o dll que causó el error. También se guardan estos detalles en el Visor de Eventos > Registros de Windows > Aplicación
Lo primero que pensaría es Incompatibilidad de DLL, si estás usando una DLL que no es del propio instalador de Visual Basic es posible que Win10 tenga la versión más reciente y el VB sea de una versión anterior.
Si te es posible puedes subir una muestra de un proyecto muy simple que de ese error, para intentar replicarlo, ver su cola de llamadas y archivos cargados para detectar el problema.
|
|
|
En línea
|
|
|
|
keef
Desconectado
Mensajes: 70
|
Lo primero que pensaría es Incompatibilidad de DLL, si estás usando una DLL que no es del propio instalador de Visual Basic es posible que Win10 tenga la versión más reciente y el VB sea de una versión anterior.
Hasta donde sé, solo uso las DLL que se instalan con el VB, aunque es posible que el Msvbvm60.dll o algún archivo parecido sea diferente, realmente no lo se Entré al visor de eventos, y me encontré con los errores mencionados, estos son los códigos y algunos detalles de estos: El programa VB6.EXE (versión 6.0.81.76) dejó de interactuar con Windows y se cerró. Para ver si hay más información disponible sobre el problema, comprueba el historial de problemas en el panel de control de seguridad y mantenimiento. Id. de proceso: 17e4 Hora de Inicio: 01d6e13daa8a4c3b Hora de finalización: 4294967295 Ruta de la aplicación: C:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6.EXE Id. de informe: 03cf55aa-0981-43c3-808f-e7c425acb432 Nombre completo del paquete con errores: Id. de la aplicación relativa al paquete con errores: Tipo de bloqueo: Top level window is idleEste es el error mas reciente, y creo que el que me motivó a hacer esta pregunta acá. Nombre de la aplicación con errores: VB6.EXE, versión: 6.0.81.76, marca de tiempo: 0x3592011f Nombre del módulo con errores: ntdll.dll, versión: 10.0.18362.1171, marca de tiempo: 0xe94aeef6 Código de excepción: 0xc0000029 Desplazamiento de errores: 0x000a2907 Identificador del proceso con errores: 0x4090
Buscaré los errores a ver que encuentro. Uno de los proyectos donde tuve este error, fue el siguiente: Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long Private Sub Form_Load() On Error Resume Next 'KPD-Team 1999 'URL: http://www.allapi.net/ 'E-Mail: KPDTeam@Allapi.net 'We're going to call an API-function, without declaring it! Dim lb As Long, pa As Long 'map 'user32' into the address space of the calling process. lb = LoadLibrary("user32") 'retrieve the address of 'SetWindowTextA' pa = GetProcAddress(lb, "SetWindowTextA") 'Call the SetWindowTextA-function CallWindowProc pa, Me.hWnd, "Hello !", ByVal 0&, ByVal 0& 'unmap the library's address FreeLibrary lb End Sub Me encontré este código en una página web, y quise probarlo, así que lo probé, y sucedió el error mencionado. Otra cosa es que en ningún momento se muestra algún mensaje de error, simplemente la aplicación deja de responder y se pone en ese estado "X aplicacion (no responde)" y luego se cierra. Gracias y saludos.
|
|
|
En línea
|
|
|
|
EdePC
|
https://www.vbforums.com/showthread.php?781115-RESOLVED-GetProcAddress-freezes-IDECallWindowProc. That function is sending 4 parameters to SetWindowText. SetWindowText expect just 2 parameters. CallWindowProc can only be used with APIs that expect 4 parameters else crashes are inevitable Pues como dice ahí, CallWindowProc envía 4 parámetros a SetWindowText, pero SetWindowText solo espera 2, entonces CRASH. CallWindowProc solo se utiliza para llamar a APIs que esperan 4 parámetros. La alternativa que proponen es utilizar SendMessageA, este si usa 4 parámetros Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long Private Const WM_SETTEXT As Long = &HC Private Sub Form_Load() Dim lb As Long, pa As Long lb = LoadLibrary("user32") pa = GetProcAddress(lb, "SendMessageA") CallWindowProc pa, Me.hwnd, WM_SETTEXT, ByVal 0&, "hello" FreeLibrary lb End Sub
|
|
|
En línea
|
|
|
|
keef
Desconectado
Mensajes: 70
|
Hola! Gracias por el link y el código, apenas pueda lo revisaré en detalle. Ahora que me doy cuenta, y recuerdo el porqué de los errores, en la mayoría de los casos en los que se presentó este problema en el VB6, es porque hay un error en el código, mas específicamente, en el uso de las APIs. Recuerdo que con GetUserName me pasó algo parecido por un problema en que no declaré una variable correctamente, y se cerró todo Saludos
|
|
|
En línea
|
|
|
|
MCKSys Argentina
|
Hola!
El IDE de VB 6 no está diseñado para funcionar en Win10. Te recomiendo usar Win7 en una VM y desarrollar ahí la aplicación. Luego puedes copiar la app fuera de la VM y usarla/probarla.
Saludos!
|
|
|
En línea
|
MCKSys Argentina "Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Diferencias Visual Basic.Net con respecto Visual Basic 6
.NET (C#, VB.NET, ASP)
|
Superplay
|
6
|
22,438
|
10 Mayo 2006, 07:57 am
por BADBYTE-K
|
|
|
Cual se utiliza mas actualmente Visual Basic o Visual basic.net?
Programación Visual Basic
|
Axus
|
9
|
13,278
|
4 Julio 2009, 07:00 am
por el_c0c0
|
|
|
[Ayuda] Sniffer en visual basic, para visual basic
Programación Visual Basic
|
The_Shakah
|
8
|
10,733
|
18 Agosto 2010, 19:35 pm
por _katze_
|
|
|
En entorno Visual Studio 2008, no se cierra.Sin entorno VS2008 se cierra.
.NET (C#, VB.NET, ASP)
|
javier234-
|
6
|
7,136
|
16 Febrero 2011, 23:08 pm
por [D4N93R]
|
|
|
Se me cierra el socket. No veo el motivo.
Programación C/C++
|
@XSStringManolo
|
1
|
2,279
|
30 Marzo 2020, 04:49 am
por RayR
|
|