Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: javier234- en 2 Febrero 2011, 20:35 pm



Título: Error al poner una estructura al leer un archivo de acceso directo
Publicado por: javier234- en 2 Febrero 2011, 20:35 pm
Hola a todos,

He creado un archivo de tipo random con 64 registros, cada uno de los cuales contiene un String de 16 caracteres y un valor de tipo Single.
El codigo es el siguiente:

RegistroParametros es la estructura con el String Nombre_Parametro de 16bytes y el Single Valor_Parametro.

        Dim ContenidoRegistroParametros As RegistroParametros
        ContenidoRegistroParametros.Nombre_Parametro = "                "
        ContenidoRegistroParametros.Valor_Parametro = 0

        FileOpen(1, "T:\Parametros.dat", OpenMode.Random, OpenAccess.Default, OpenShare.Shared)
        Dim i As Integer
        For i = 1 To 64
            FileGet(1, ContenidoRegistroParametros, i)
            MessageBox.Show(ContenidoRegistroParametros.Nombre_Parametro)
        Next

Error   1   Option Strict On no permite restricciones del tipo 'System.ValueType' al tipo 'AccesoArchivoDeParametros.Form1.RegistroParametros' al copiar de nuevo el valor del parámetro 'ByRef' 'Value' en el argumento correspondiente.

Si cambio ContenidoRegistroParametros por ContenidoRegistroParametros.Nombre_Parametro, no me dice que hay error, pero al ejecutarse se para.

Alguien sabe como puedo arreglarlo?
Gracias anticipadas y saludos


Título: Re: Error al poner una estructura al leer un archivo de acceso directo
Publicado por: Elemental Code en 2 Febrero 2011, 22:25 pm
De donde yo vengo eso no se hace asi.

Seguro que vos no sos programador de .NET?


Título: Re: Error al poner una estructura al leer un archivo de acceso directo
Publicado por: javier234- en 2 Febrero 2011, 22:33 pm
Gracias Elemental Code por responder,

No soy programador de .NET.Estoy aprendiendo Visual Basic 2008 y trato de hacer cosas sacadas de lo que hacen aplicaciones.
Podrias decirme como se hace?.Te lo agradeceria.
Aunque he hecho un par de tutoriales, hay cosas aun que no tengo claras y pienso que programando y haciendo cosas practicas viene muy bien para aprender.
Saludos


Título: Re: Error al poner una estructura al leer un archivo de acceso directo
Publicado por: Karcrack en 2 Febrero 2011, 22:40 pm
(http://1.bp.blogspot.com/_8B6qKe6pMQE/S0W4VqSTnVI/AAAAAAAACHw/QktyTJg6On4/s400/facepalm.jpg)
VB08 forma parte de .NET
Código:
http://es.wikipedia.org/wiki/Microsoft_.NET


Título: Re: Error al poner una estructura al leer un archivo de acceso directo
Publicado por: javier234- en 2 Febrero 2011, 22:43 pm
Si, que VB 2008 forma parte de .NET, lo se.Lo que queria decir es que no soy un programador experto ni de Visual Basic ni de ningun otro lenguaje de .NET.
Saludos


Título: Re: Error al poner una estructura al leer un archivo de acceso directo
Publicado por: kingdarnakes en 2 Febrero 2011, 22:50 pm
Deberias de poner el código entre las etiquetas [code ][/ code] sin espacios así se lee mejor.

En que linea te da el error?

Código:
ContenidoRegistroParametros.Nombre_Parametro = "                "

Si es en esta linea asegurate de que existe Nombre_parametro.

Código:
FileGet(1, ContenidoRegistroParametros, i)

No entiendo que quieres hacer ahí. Lo que yo entiendo es que lo que tu quieres hacer no lo estas haciendo de forma correcta...


Título: Re: Error al poner una estructura al leer un archivo de acceso directo
Publicado por: javier234- en 2 Febrero 2011, 23:06 pm
Gracias kingdarnakes por responder,

El error que puse me lo da si en la linea de lectura del archivo FileGet(1,ContenidoRegistroParametros,i)
Ahi aparece el error de Opcion Strict On no permite....
en cambio si en esa line pongo FileGet(1,ContenidoRegistroParametros.Valor_parametro,i) no da error ninguno de codigo fuente.En cambio, si lo compilo, en la compilacion da error y se cuelga.
Saludos


Título: Re: Error al poner una estructura al leer un archivo de acceso directo
Publicado por: kingdarnakes en 2 Febrero 2011, 23:13 pm
Gracias kingdarnakes por responder,

El error que puse me lo da si en la linea de lectura del archivo FileGet(1,ContenidoRegistroParametros,i)
Ahi aparece el error de Opcion Strict On no permite....
en cambio si en esa line pongo FileGet(1,ContenidoRegistroParametros.Valor_parametro,i) no da error ninguno de codigo fuente.En cambio, si lo compilo, en la compilacion da error y se cuelga.
Saludos


Claro ya que ContenidoRegistroParametros es una referencia a una estructura, y no apunta a ninguna variable ni array ni nada...

Mira en la documentación de FileGet y entenderás porque el error.
http://msdn.microsoft.com/es-es/library/microsoft.visualbasic.filesystem.fileget.aspx


Título: Re: Error al poner una estructura al leer un archivo de acceso directo
Publicado por: javier234- en 2 Febrero 2011, 23:39 pm
Bien, lo que me dices ya es algo, pq no sabia como acceder al MSDN de Microsoft para ver directamente explicacion de errores.
Por lo que se ve no puede ponerse ahi una estructura y si los tipos que indica, como String.Por eso si pongo ContenidoRegistroParametros.Valor_parametro, no da error de codigo fuente,pero si al compilar, y el error que da es:
Longitud de registro incorrecta.
Si pongo despues del i ,20 que es lla longitud del registro, el error que me da en codigo fuente es:

Error   1   Error de resolución de sobrecarga porque ninguna de las funciones 'FileGet' a las que se tiene acceso se puede llamar con estos argumentos:
    'Public Sub FileGet(FileNumber As Integer, ByRef Value As String, [RecordNumber As Long = -1], [StringIsFixedLength As Boolean = False])': Option Strict On no permite la conversión implícita de 'Integer' en 'Boolean'.
    'Public Sub FileGet(FileNumber As Integer, ByRef Value As System.Array, [RecordNumber As Long = -1], [ArrayIsDynamic As Boolean = False], [StringIsFixedLength As Boolean = False])': Un valor de tipo 'String' no se puede convertir en 'System.Array'.
    'Public Sub FileGet(FileNumber As Integer, ByRef Value As System.Array, [RecordNumber As Long = -1], [ArrayIsDynamic As Boolean = False], [StringIsFixedLength As Boolean = False])': Option Strict On no permite la conversión implícita de 'Integer' en 'Boolean'.

Cada vez veo mas dificil el .NET.
Saludos