Bonjour,
Je voulais porter un petit projet (pas de moi) développé en Delphi (version inconnue, pas récente) et qui fonctionne bien dans ma VM 2000, vers mon Lazarus qui tourne sous Linux Debian, tout ce petit monde en 32 bits.
Et une fonction ne fait pas ce que j'attends d'elle.
À grands coups de ShowMessage j'ai trouvé que ça se passait là :
Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ShowMessage(IntToStr(Stream.Position)); // = 20, suite aux opérations précédentes, idem Delphi-Lazarus Stream.Position := Stream.Position + ReadWord(Stream) * 12; ShowMessage(IntToStr(Stream.Position)); // = 130 en Delphi et 128 en Lazarus !
Comment expliquer ce 130 en Delphi ?
130 = 110 - 20, et 110 n'est pas divisible par 12, que je sache.
128 = 108 - 20, et 108 div 12 = 9 ; dans Lazarus, ça semble déjà plus net.
La fonction ReadWord :
Mais pourquoi Delphi fait-il +2 en fin de calcul ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 function ReadWord(Stream: TStream): Word; begin Stream.ReadBuffer(Result, SizeOf(Result)); end;
Voilà, si quelqu'un pouvait m'expliquer ce petit mystère, je lui en serai éternellement reconnaissant (si si)
Partager