Error al poner una estructura al leer un archivo de acceso directo

Iniciado por javier234-, 2 Febrero 2011, 20:35 PM

0 Miembros y 1 Visitante están viendo este tema.

javier234-

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

Elemental Code

De donde yo vengo eso no se hace asi.

Seguro que vos no sos programador de .NET?

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

javier234-

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

Karcrack


VB08 forma parte de .NET
http://es.wikipedia.org/wiki/Microsoft_.NET

javier234-

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

kingdarnakes

Deberias de poner el código entre las etiquetas [code ][/ code] sin espacios así se lee mejor.

En que linea te da el error?

ContenidoRegistroParametros.Nombre_Parametro = "                "

Si es en esta linea asegurate de que existe Nombre_parametro.

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...

javier234-

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

kingdarnakes

Cita de: 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


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

javier234-

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