none
Capturar un error del sistema con Visual Basic 6 RRS feed

  • Pregunta

  • Hola buenos días.

    No se si está pregunta está ya respondida o no, pero no he encontrado nada que me pueda valer. El tema es que tengo una aplicación que llama  a un módulo de java y este devuelve un error al sistema (0 si es correcto y 1 si es incorrecto), pero no se como capturar ese error. Seguro que es una chorrada, pero no he encontrado nada.

    Muchas gracias!!

    martes, 13 de noviembre de 2012 9:08

Todas las respuestas

  • Al inicio del procedimiento puedes colocar

    ..sub o funtcion...

    on error goto lbl_error

    ..proceso

    ..proceso

    lbl_salir:

    exit sub o function

    lbl_error:

    msgbox err.description

    resume lbl_salir

    -----

    Lo ideal es tener una función para manejar errores, a la cual le pasas el numero de error y allí se muestra al usuario el mensaje.

    martes, 13 de noviembre de 2012 10:35
  • Gracias por tu respuesta, pero esto no me vale, ya que el programa, o mejor dicho, la llamada a la función de java, no devuelve ningún error en sí, si no que lo que hace es validar un dato y devolver un 0 ó un 1 dependiendo de si es correcto ese dato o no. Eso me valdría si la ejecución del programa de visual basic diera un error, pero un código que devuelve el programa de java como error del sistema no se puede tratar con ese control de errores.
    martes, 13 de noviembre de 2012 11:04
  • Si lo que haces es llamar a una función de un módulo en Java lo que debes hacer es controlar el error desde la parte de Java.

    Si lo que quieres es capturar el error desde VB 6 puedes, por ejemplo,  trabajar con variables de entorno en la que guardes el error desde Jave y lo recuperes luego desde VB6.


    Saludos, Javier J

    martes, 13 de noviembre de 2012 11:42
  • Hola,

    Tal vez deberias mostrarnos como haces la llamada a la funcion y como la declaras.

    Con esa informacion podriamos ayudarte.

    Victor Koch

    martes, 13 de noviembre de 2012 12:58
  • El programa funciona bien, pero el módulo de java, tiene que devolver un código de error (0 ó 1) dependiendo de si el nif es correcto (el nif se le pasa con la caja de texto Text1.text). Eso lo tiene que hacer por que la ejecución del programa es correcto, pero no se como capturar ese código que devuelve java al sistema.

    El código del programa es el siguiente

    Option Explicit

    Private Declare Function WaitForSingleObject Lib "kernel32" _
             (ByVal hHandle As Long, _
             ByVal dwMilliseconds As Long) As Long

    Private Declare Function CreateProcessA Lib "kernel32" (ByVal _
          lpApplicationName As Long, ByVal lpCommandLine As String, ByVal _
          lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
          ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
          ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
          lpStartupInfo As STARTUPINFO, lpProcessInformation As _
          PROCESS_INFORMATION) As Long

    Private Declare Function CloseHandle Lib "kernel32" _
          (ByVal hObject As Long) As Long

    Private Type STARTUPINFO
          cb As Long
          lpReserved As String
          lpDesktop As String
          lpTitle As String
          dwX As Long
          dwY As Long
          dwXSize As Long
          dwYSize As Long
          dwXCountChars As Long
          dwYCountChars As Long
          dwFillAttribute As Long
          dwFlags As Long
          wShowWindow As Integer
          cbReserved2 As Integer
          lpReserved2 As Long
          hStdInput As Long
          hStdOutput As Long
          hStdError As Long
       End Type

    Private Type PROCESS_INFORMATION
       hProcess As Long
       hThread As Long
       dwProcessID As Long
       dwThreadID As Long
    End Type

    Dim Ruta As String

    Private Sub Command1_Click()
    On Error GoTo ONOFRE

    Dim Inicio As STARTUPINFO
    Dim Proceso As PROCESS_INFORMATION
    Dim CodigoError As Integer

    Ruta = "Java -Jar d:\ValidarNif\ValNif.jar " & Text1.Text

    'Lanza el proceso
    Inicio.cb = Len(Inicio)
    CreateProcessA 0&, Ruta, 0&, 0&, 1&, &H20&, 0&, 0&, Inicio, Proceso

    'Espera hasta la terminación (Tiempo infinito)
    WaitForSingleObject Proceso.hProcess, &HFFFFFFFF

    'Cierre el proceso
    CloseHandle Proceso.hThread
    CloseHandle Proceso.hProcess

    End sub

    martes, 13 de noviembre de 2012 13:30
  • Si lo que haces es llamar a una función de un módulo en Java lo que debes hacer es controlar el error desde la parte de Java.

    Si lo que quieres es capturar el error desde VB 6 puedes, por ejemplo,  trabajar con variables de entorno en la que guardes el error desde Jave y lo recuperes luego desde VB6.


    Saludos, Javier J

    Javier, y como hago eso, esa es la parte que no se implementarla. El capturar el error en visual Basic que devuelve una aplicación externa al sistema, en este caso, un módulo de java, pero imagínate que es otro ejecutable o lo que sea, es acceder al error del sistema.
    martes, 13 de noviembre de 2012 13:32
  • Javier, creo que el planteamiento inicial no es correcto. Realmente lo que deseas es obtener un valor devuelto por una aplicación Java.

    http://www.reocities.com/Hollywood/boulevard/1781/capitulo_especial.htm

    martes, 13 de noviembre de 2012 13:57
  • Javier, creo que el planteamiento inicial no es correcto. Realmente lo que deseas es obtener un valor devuelto por una aplicación Java.

    http://www.reocities.com/Hollywood/boulevard/1781/capitulo_especial.htm

    Javier, creo que esto que me has puesto no vale, por que yo no tengo un .class que incorporar a la aplicación. Yo desde mi código visual basic, ejecuto un .jar (que es un validador de nif) al cual se le pasa un parámetro. Hasta ahí lo tengo controlado. El problema me surge por que esa llamada al .jar devuelve un valor (que lo devuelve como error del sistema) y yo desde el código de visual basic no se como recuperar ese valor. Imagino que en visual existe alguna librería o algo que haga referencia a los errores del sistema para poder controlarlos de alguna forma. Eso es lo que necesito, como acceder a los errores que se han producido en el sistema.

    Gracias

    martes, 13 de noviembre de 2012 15:12
  • David, te paso un link para que veas la API GetExitCodeProcess que creo que es lo que estas buscando... te dejo tambien un ejemplo de como usarla...

    Saludos desde Mexico.


    EmmaRmz

    martes, 13 de noviembre de 2012 23:05