none
Error al abrir archivo hex RRS feed

  • Pregunta

  • Hola a todos, espero que estén bien. Tengo un problema con un programa que hice.  Es un programa para editar componentes de un juego, el cual consiste en abrir un archivo y leer sus datos para cargar las coordenadas en un panel y poder editar el marcador de goles. 

    A mí me anda bien y algunos también pero resulta que a algunos usuarios les da problemas al importar el archivo. a los chicos que les dió problemas son de otros países...

    este es un ejemplo del código que uso:

    Private Sub Importar(ByVal hexfile As Boolean)
            Dim fs As New FileStream(dlgAbrir.FileName, FileMode.Open)
            Dim br As New BinaryReader(fs)


            'Marcador
            fs.Position = 738 'offset
            ScrX.Text = CStr(br.ReadInt16())
            ScrX.Text = CStr(CDbl(ScrX.Text) / "12,8") + 320
            fs.Position = 740 'offset
            ScrY.Text = CStr(br.ReadInt16())
            ScrY.Text = CStr(CDbl(ScrY.Text) / "13,94") + 240
            fs.Position = 764 'offset
            ScrAN.Text = CStr(br.ReadInt16())
            ScrAN.Text = CStr(CDbl(ScrAN.Text) / "12,8")
            fs.Position = 754 'offset
            ScrAL.Text = CStr(br.ReadInt16())
            ScrAL.Text = CStr(CDbl(ScrAL.Text) / "13,94")

    'despues de ese hay más código para abrir muchos offset del archivo hexadecimal
            br.Close()
            fs.Close()
            MsgBox("Marcador Cargado")

        End Sub

    Por lo que me comentaron y pude ver no muestra los valores correctamente.
    No he podido encontrar una solución ya que soy nuevo en esto,  no sé cuál podría ser la solución... Espero que me ayuden a que les funciona bien el programa a todos. Gracias.

            
    martes, 16 de julio de 2019 20:46

Respuestas

  • Hay un problema serio en las sentencias que escribes con este estilo:

    CStr(CDbl(ScrAL.Text) / "13,94")

    Fíjate que primero tomas el String SrrAL.Text. Después le aplicas un CDbl, con lo que VB tiene que analizar el string para convertirlo en Double, cosa que hace aplicando la configuración regional que haya en el panel de control de ese equipo (concretamente, puno o coma para los decimales).

    A continuación, ese double lo divides por un string, "13,94". Esto no es lícito, no puedes dividir por un string sino solo por un número, por lo que VB realiza internamente una conversión implícita de String a Double. Una vez más, vuelve a usar la configuración regional del equipo. Puesto que has usado una coma decimal, esto fallará en los equipos que estén configurados para usar un punto decimal. Por eso les funciona a unos usuarios y no a otros.

    Finalmente, el resultado de la división, que es un double, lo vuelves a convertir a String. Una vez más, esta conversión aplicará la configuración regional del equipo, lo cual puede que te convenga o no, dependiendo de cómo quieras mostrar los datos.

    En resumidas cuentas: Ojo con las conversiones de número a cadena y viceversa, que de forma predeterminada aplican la configuración regional. En particular, nunca escribas en tu código fuente un número entre comillas. No sirve para nada, es ineficiente, poco claro, y encima puede producir errores dependiendo de cómo esté configurado el equipo. Ponlo siempre sin comillas usando la configuración del compilador (usar siempre un punto, no una coma).


    miércoles, 17 de julio de 2019 17:55

Todas las respuestas

  • Hola  Lucas Gutierrez

     

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te recomiendo ingresar al siguiente enlace donde puedes encontrar una posible solución para tu problema.

    https://support.microsoft.com/es-gt/help/917607/feature-not-included-help-not-supported-error-opening-help-windows

     

    Gracias por usar los foros de MSDN.

     

    Pablo Rubio

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. 

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    miércoles, 17 de julio de 2019 16:35
  • Hay un problema serio en las sentencias que escribes con este estilo:

    CStr(CDbl(ScrAL.Text) / "13,94")

    Fíjate que primero tomas el String SrrAL.Text. Después le aplicas un CDbl, con lo que VB tiene que analizar el string para convertirlo en Double, cosa que hace aplicando la configuración regional que haya en el panel de control de ese equipo (concretamente, puno o coma para los decimales).

    A continuación, ese double lo divides por un string, "13,94". Esto no es lícito, no puedes dividir por un string sino solo por un número, por lo que VB realiza internamente una conversión implícita de String a Double. Una vez más, vuelve a usar la configuración regional del equipo. Puesto que has usado una coma decimal, esto fallará en los equipos que estén configurados para usar un punto decimal. Por eso les funciona a unos usuarios y no a otros.

    Finalmente, el resultado de la división, que es un double, lo vuelves a convertir a String. Una vez más, esta conversión aplicará la configuración regional del equipo, lo cual puede que te convenga o no, dependiendo de cómo quieras mostrar los datos.

    En resumidas cuentas: Ojo con las conversiones de número a cadena y viceversa, que de forma predeterminada aplican la configuración regional. En particular, nunca escribas en tu código fuente un número entre comillas. No sirve para nada, es ineficiente, poco claro, y encima puede producir errores dependiendo de cómo esté configurado el equipo. Ponlo siempre sin comillas usando la configuración del compilador (usar siempre un punto, no una coma).


    miércoles, 17 de julio de 2019 17:55