Je suis depuis peu sous Delphi XE...et je reprend du code Delphi 6
alors rapidement j'ai ajouté ceci dans mon code
sous D6 j'utilisais beaucoup les strings comme buffer de données binaires. C'est en effet très pratique de manipuler des buffers avec Pos(), + Insert(), Delete() etc...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 type {$IFNDEF UNICODE} RawByteString = string; {$ENDIF}
sauf que le type string sous D2009+ est un UnicodeString...il faut donc remplacer string par RawByteString et ajouter ce type pour les version de Delphi non-unicode.
ça c'est pour le binaire...maintenant les string
dans une appli je teste qu'une chaîne comprend au moins x caractères, sinon je lui ajoute les espaces manquants
ça compile sans problème, mais à l'exécution on se retrouve avec un chaîne tordue qui contient des caractères Wide $4040 !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 var cLen : Integer; begin cLen := Length(cStr); if cLen < x then begin SetLength(cStr, x); FillChar(cStr[cLen + 1], x - cLen, ' '); end; end;
en version Unicode on aura
je trouve cela d'autant plus vicieux que FillChar se nomme bien FillChar et non FillMem ou FillByte...alors que tout ce qui était Char avant devient WideChar en unicode : Char, Chr(), PChar...maintenant FillChar n'est pas toujours utilisé sur des string...donc le forcer en Wide aurait posé bien d'autres problèmes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 {$IFDEF UNICODE} cStr := cStr + StringOfChar(' ', x - cLen); {$ELSE} SetLength(cStr, x); FillChar(cStr[cLen + 1], x - cLen, ' '); {$ENDIF}
Partager