![]() |
Konstanten-Migration auf Delphi 2009 (#1#2#3...)
Hallo!
Bei der aktuellen Migration eines Delphi7-Projektes auf Delphi2009 bin ich auf folgendes Problem gestoßen: Ich habe eine Konstante, die wie folgt belegt ist (Delphi7):
Delphi-Quellcode:
Die wird unter Delphi2009 natürlich nun falsch gelesen. Aus den D2009-Migrationsanleitungen konnte ich ableiten, dass ich stattdessen folgendes schreiben kann, um das Problem zu beheben:
CS_PWD_PREFIX = #67#12#8#9#133#201#253#15#8;
Delphi-Quellcode:
Macht das Ganze jetzt nicht gerade übersichtlicher, daher meine Frage: Geht's auch eleganter?
CS_PWD_PREFIX =
Chr(67) + Chr(12) + Chr(8) + Chr(9) + Chr(133) + Chr(201) + Chr(253) + Chr(15) + Chr(8); Danke & Gruß, kaju |
Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)
Vielleicht als typisierte Konstante:
Delphi-Quellcode:
CS_PWD_PREFIX : Ansistring = #67#12#8#9#133#201#253#15#8;
|
Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)
...tja, das hatte ich zunächst auch gehofft, funktioniert aber nicht. Die Konstante wird als "Salz" zum Crypten eines Passworts genutzt, dass dann in eine "Altbackende"-DBF Tabelle geschrieben wird, die nur ANSI kann. Aus dieser wird der Hash dann auch gelesen und über eine Compare-Funktion (und wiederum der Konstante) geprüft. Hier hatte ich dann rausgefunden, dass der aus der Datenbank gelesene Wert (noch unter Delphi7) nicht mehr mit dem zu vergleichenden Wert (Delphi2009) übereinstimmt:
Delphi-Quellcode:
Die auskommentierte Zeile funktioniert nicht, die darunterliegende geht!
const
//CS_PWD_PREFIX: AnsiString = #67#12#8#9#133#201#253#15#8; CS_PWD_PREFIX = Chr(67) + Chr(12) + Chr(8) + Chr(9) + Chr(133) + Chr(201) + Chr(253) + Chr(15) + Chr(8); begin Result := xpBuildChecksum(Format('%d%s', [UserID, CS_PWD_PREFIX + Password])); end; Gruß, kaju |
Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)
Hi kaju74,
Zitat:
Also folgende Lösung geht:
Delphi-Quellcode:
Gruß Assertor
{$HIGHCHARUNICODE ON}
procedure foo(); const CS_PWD_PREFIX: AnsiString = #67#12#8#9#133#201#253#15#8; // CS_PWD_PREFIX = Chr(67) + Chr(12) + Chr(8) + Chr(9) + Chr(133) + Chr(201) + Chr(253) + Chr(15) + Chr(8); begin Result := xpBuildChecksum(Format('%d%s', [UserID, CS_PWD_PREFIX + Password])); end; {$HIGHCHARUNICODE OFF} Edit: Bessere Erklärung nachgeliefert... |
Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)
Ahhhh...vielen Dank. Die Direktive kannte ich noch nicht. Hier mal eine Erklärung von Dr.Bob:
Zitat:
kaju |
Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)
Zitat:
Delphi-Quellcode:
siehe:
CS_PWD_PREFIX = #67#12#8#9#$0055#$00C9#$00FD#15#8;
// oder CS_PWD_PREFIX = #$0043#$000C#$0008#$0009#$0055#$00C9#$00FD#$000F#$0008; ![]() Diese Direktive kannt ich auch noch nicht :shock: [edit] *grad nachgeguckt hab* "schön", daß diese Direktive auch in der OH aufgeführt wird *bisslironischgemeint* [/edit] Zitat:
die Varianten mit Chr bringen nix, da dort am Ende die selbe Zeichenkonvertirung stattfindet, wie bei #xx ... aus chr(xx) und #xx macht der Compiler ja praktisch das Selbe. |
Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)
Hi...
Danke auch für diese Lösung 8-) Zitat:
Gruß, kaju |
Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)
:oops: ach mensch ... früher war's das Selbe ... stimmt ja, jetzt ist Chr=WideChar und erstellt so 'nen WideString
#xx und #$xx erstellt standardmäßig einen AnsiChar (außer bei #$xxxx oder xx>255) und demnach einen WideString nja, zumindestens muß man schön aufpassen, wie man was macht, sobald man den ASCII-Bereich verläßt :wall: |
Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)
...wem sagst Du das...der Teufel steckt hier echt im Detail: Streams, #-Kodierungen,...Ich krieg' hier pro zu migrierendem Projekt um die 1000 Compiler-Warnings wegen Ansi->Unicode Typecasts...naja, im Groben funktionieren Sie aber, nur an manchen Stellen happert's halt (wie eben dieser Hash-Geschichte weiter oben).
Danke & Gruß, kaju |
Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)
schlimmer wird es, wenn du Code schreiben willst, welcher unter D2009 und früher laufen soll :wall:
da bekommt man schon manchma 'ne Kriese vorallem wenn man im Code AnsiString, WideString oder gar UnicodeString mit einem "normalen" String kreuzt. zumindestens UnicodeString hab ich jetzt so gelößt, daß ich TWideString als Typ verwende und diesen anfangs per Kompilerschalter entweder als WideString oder UnicodeString definiere ^^ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz