Hola Delfos : {y a todo el mundo, que hace tiempo que no me paso por aquí}
Bueno, tu problema.. es menos grave de lo que piensas xD. a ver si consigo explicarme bien {y si no estoy en lo correcto, que alguien me corrija}. Para empezar, no es un SizeOf loco, todo esto va de memoria y optimización. Delphi, en un afán de acelerar el acceso a los datos, guarda en memoria los records de la manera que "mejor le viene", esto significa, que, por ejemplo, si tenemos esto:
type
MyRec = record
Variable1: Byte;
Variable2: DWord;
end;
Delphi alineará este "record" como a él mejor le parezca para después, acceder a los datos más rápidamente.
En este caso,
SizeOf(MyRec)
devolverá 8, lo cual no significa que "Variable1" ocupe 4 bytes, si no que los ha alineado de forma que el tamaño de trabajo es de 8 bytes.
Ahora bien.. ¿como arreglar este "fallo"? Bueno, si no quieres que delphi haga de las suyas en esta clase de cosas (y con hacer de las suyas me refiero a intentar agilizar su trabajo), la solución es simple se llama "packed".. y se implementa tal que así:
type
MyRec = packed record
S: Byte;
S1: DWord;
end;
Si ahora haces un
SizeOf(MyRec)
verás que en este caso, si que da lo que debería dar si los datos están alineados tal y como los has puesto, que es 5 bytes.
Espero que esto te haya solucionado el problema.
Un Saludo AitorC
P.S.: Si no me he explicado muy bien.. y quieres q lo explique mejor {lo he puesto todo muy por encima}, solo tines q pedirlo