steph1969
Messages postés4Date d'inscriptionmardi 1 avril 2003StatutMembreDernière intervention 1 novembre 2004
-
25 oct. 2004 à 19:22
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 2006
-
2 nov. 2004 à 18:50
Bonjour à tous,
Mon application utilise énormément de structure Record et
de fichiers dans lesquels ces structures sont sauvegardées.
j'avais à l'époque rencontré un ENORME problème lors du passage à delphi 5.0 ( venant de 3.0 ) à cause du changement de stratégie dans l'alignement des bytes d'un record.
Je suis en train de migré vers Delphi 6(voir 7) ( j'ai besoin des Web service) et je suis en phase test. Tout semble bien se passer en ce qui concerne la compatibilité des record entre v6 et v5 jusque qu'aujourd'hui ou je trouve ceci :
En Delphi 5.0 : la structure suivante donne :
ProprieteGeneralComposant = record
ID : String[10] ; // sizeof : 11 position : 0
Version : SmallInt ; // sizeof : 2 position : 12
Position : trect ; // sizeof : 16 position : 16
Typecomposant : SmallInt ; // sizeof : 2 position : 32
end;
sizzeof( proprietegeneralComposant ) = 36
En Delphi 6.0 : la même structure donne :
ProprieteGeneralComposant = record
ID : String[10] ; // sizeof : 11 position : 0
Version : SmallInt ; // sizeof : 2 position : 12
Position : trect ; // sizeof : 16 position : 14
Typecomposant : SmallInt ; // sizeof : 2 position : 30
end;
sizzeof( proprietegeneralComposant ) = 32
J'ai facilement contounée le problème en insérant des variables pour combler les vides, mais je n'arrive pas à trouver un logique à ce phénomène. De plus cela me donne le vertige ... car je n'ose espérer que ce problème ne soit une exception parmis tous les record présent dans mon application et dans les fichiers des utilisateurs..... ( la position est obtenue avec la fonction Addr( ) )
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 2 nov. 2004 à 18:49
Je ne vois que les fonctions ReadBlock et WriteBlock. A part ça, c'est tout. J'ai déjà eu un problème pareil, et j'ai jeté l'éponge. De toute façon, ça n'avait pas d'importance. Je me demande aussi si les "record" ne doivent pas être "packed record"... Je suis sous Delphi 3 pour toujours !