Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-08-2010
jfh900 jfh900 is offline
Registrado
 
Registrado: ago 2010
Posts: 7
Poder: 0
jfh900 Va por buen camino
Record ¿un nuevo misterio?

Hola a todos. Soy nuevo en le foro, pero no en la programación en Delphi.

Escribo este post por que me he encontrado una situación extraña utilizando los records. Me explico:

Estoy realizando un componente para capturar los datos de un GPS. Básicamente el GPS manda unas tramas vía RS232 con los distintos datos. Estas tramas se identifican por un comienzo y fin de trama y un código de trama. Bien yo capturo la trama e intento copiar los datos a una variable definida por un record para separar los distintos datos. Hasta aquí todo correcto.

Cuando empiezo a hacer pruebas los datos que obtengo no coinciden con los datos enviados, y empiezo a indagar, llegando al meollo de la cuestión.

Probar lo siguiente:

Ponemos un record del siguiente tipo:

Código Delphi [-]
TTrama=Record       
   Byte1: Byte;       
   Byte2: Byte;       
   Byte3: Byte;       
   Numer1: DWord;       
   Numer2: DWord;       
   Numer3: DWord;       
   Numer4: DWord;       
   Table: Array[1..13] of byte; 
End;

Bien si añadimos un botón para ver el tamaño del recor:

Código Delphi [-]
ShowMessage(IntToStr(SizeOf(TTrama)));

Obtenemos: 36.

Si hacemos las cuentas tenemos:

3+4x4+13=3+16+13=32

Como podéis ver no coincide el tamaño definido o esperado con el que me devuelve el compilador.

¿Alguien tiene la solución?.

Un saludo y perdón por el peñazo.

Última edición por jfh900 fecha: 09-08-2010 a las 17:08:36. Razón: Marcar opciones
Responder Con Cita
  #2  
Antiguo 09-08-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Prueba este sutil cambio:
Código Delphi [-]
TTrama = packed record
   Byte1: Byte;
   Byte2: Byte;
   Byte3: Byte;
   Numer1: DWord;
   Numer2: DWord;
   Numer3: DWord;
   Numer4: DWord;
   Table: Array[1..13] of byte;
End;

Cita:
Empezado por Delphi Help
By default, the values in a structured type are aligned on word or double-word boundaries for faster access. When you declare a structured type, you can include the reserved word packed to implement compressed data storage.
Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 09-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

O también con la directiva:
Código Delphi [-]
{$A-}


Saludos.
Responder Con Cita
  #4  
Antiguo 09-08-2010
jfh900 jfh900 is offline
Registrado
 
Registrado: ago 2010
Posts: 7
Poder: 0
jfh900 Va por buen camino
Muchas gracias Federico Firenze y ecfisa esa es la solución. Desgraciadamente la ayuda que trae Delphi sobre el asunto está un poco oculta, despues de saber la solución, efectivamente estaba en la ayuda.

Muchas gracias a los dos y un saludo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
El misterio del cuarto dedo. marcoszorrilla La Taberna 7 10-10-2008 20:18:30
Misterio en Photoshop HenSoft Varios 37 25-09-2008 18:51:26
Misterio. marcoszorrilla La Taberna 0 07-07-2008 20:24:53
El Misterio de las ADO yusnerqui Varios 7 13-03-2004 17:25:15


La franja horaria es GMT +2. Ahora son las 08:01:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi