AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Konstanten-Migration auf Delphi 2009 (#1#2#3...)
Thema durchsuchen
Ansicht
Themen-Optionen

Konstanten-Migration auf Delphi 2009 (#1#2#3...)

Ein Thema von kaju74 · begonnen am 19. Mär 2009 · letzter Beitrag vom 19. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
kaju74

Registriert seit: 22. Okt 2003
185 Beiträge
 
#1

Konstanten-Migration auf Delphi 2009 (#1#2#3...)

  Alt 19. Mär 2009, 11:32
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):

CS_PWD_PREFIX = #67#12#8#9#133#201#253#15#8; 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:

Delphi-Quellcode:
  CS_PWD_PREFIX =
    Chr(67) + Chr(12) + Chr(8) + Chr(9) + Chr(133) + Chr(201) +
    Chr(253) + Chr(15) + Chr(8);
Macht das Ganze jetzt nicht gerade übersichtlicher, daher meine Frage: Geht's auch eleganter?

Danke & Gruß,
kaju
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)

  Alt 19. Mär 2009, 11:42
Vielleicht als typisierte Konstante:CS_PWD_PREFIX : Ansistring = #67#12#8#9#133#201#253#15#8;
Andreas
  Mit Zitat antworten Zitat
kaju74

Registriert seit: 22. Okt 2003
185 Beiträge
 
#3

Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)

  Alt 19. Mär 2009, 11:50
...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:
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;
Die auskommentierte Zeile funktioniert nicht, die darunterliegende geht!

Gruß,
kaju
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#4

Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)

  Alt 19. Mär 2009, 12:35
Hi kaju74,

Zitat von kaju74:
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:
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;
Die auskommentierte Zeile funktioniert nicht, die darunterliegende geht!
D2009 interpretiert die Chr() Aufrufe wie WideChar() daher funktioniert das wieder mit dem Format, welches ja am UnicodeString arbeitet (jedenfalls für Chars im SmallInt Bereich). Bei dem auskommentierten AnsiString werden die WideChars aber explizit wieder zu einem AnsiString zusammengesetzt, dabei gehen Informationen verloren bzw. wird eine Anpassung mit Hilfe der CodePage vorgenommen. Das Ergebnis unterscheidet sich somit von dem Chr() Prefix-Versuch.

Also folgende Lösung geht:
Delphi-Quellcode:
{$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}
Gruß Assertor

Edit: Bessere Erklärung nachgeliefert...
Frederik
  Mit Zitat antworten Zitat
kaju74

Registriert seit: 22. Okt 2003
185 Beiträge
 
#5

Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)

  Alt 19. Mär 2009, 12:52
Ahhhh...vielen Dank. Die Direktive kannte ich noch nicht. Hier mal eine Erklärung von Dr.Bob:

Zitat:

Character literals between #128 and #255 – the so-called high ASCII values – have a specific value depending on the ANSI code page. As a result, we should not use the #128..#255 character literals, but use the actual characters themselves which will end up as Unicode characters in the source code.

(*$HIGHCHARUNICODE OFF*)

With the HIGHCHARUNICODE set to OFF, we can define the high-ASCII values without them turning into Unicode characters.

(*$HIGHCHARUNICODE OFF*)
var
C: AnsiChar;
begin
C := #128;

Without turning HIGHCHARUNICODE OFF, we would get a warning that the #128 character, actually WideChar constant #$0080 (based on the current active code page), would have to be narrowed from WideChar to AnsiChar.
Gruß,
kaju
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#6

Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)

  Alt 19. Mär 2009, 15:11
Zitat:
CS_PWD_PREFIX = #67#12#8#9#133#201#253#15#8;
Lösung:
Delphi-Quellcode:
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;
siehe:
http://www.delphipraxis.net/internal...t.php?t=153308


Diese Direktive kannt ich auch noch nicht

[edit]
*grad nachgeguckt hab*
"schön", daß diese Direktive auch in der OH aufgeführt wird *bisslironischgemeint*
[/edit]

Zitat von shmia:
Vielleicht als typisierte Konstante:CS_PWD_PREFIX : Ansistring = #67#12#8#9#133#201#253#15#8;
wenn er das dann nach WideString/UnicodeString umwandelt, dann gibt's spätestens da auch Probleme (ohne diese Direktive)

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
kaju74

Registriert seit: 22. Okt 2003
185 Beiträge
 
#7

Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)

  Alt 19. Mär 2009, 15:21
Hi...

Danke auch für diese Lösung

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.
...da muss es dann aber doch einen Unterschied geben: Die Variante mit Chr funktioniert nämlich und erzeugt dann das gleiche Resultat wie noch unter D7....

Gruß,
kaju
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#8

Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)

  Alt 19. Mär 2009, 15:44
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
kaju74

Registriert seit: 22. Okt 2003
185 Beiträge
 
#9

Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)

  Alt 19. Mär 2009, 15:53
...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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#10

Re: Konstanten-Migration auf Delphi 2009 (#1#2#3...)

  Alt 19. Mär 2009, 17:42
schlimmer wird es, wenn du Code schreiben willst, welcher unter D2009 und früher laufen soll
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 ^^
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz