Thema: Delphi NativeInt to string

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: NativeInt to string

  Alt 10. Sep 2022, 18:15
Das ist wie der Unterschid bei


Delphi-Quellcode:
var
  S: string;
  P: Pointer;

P := @S[1];
P := @S[Low(string)]; // weil im Mobilen waren die Strings mal 0-basiert, also S[0] war das erste Zeichen wenn für iOS kompiliert

P := @S; // Zeiger auf die Variable, nicht auf den String
P := PChar(S); // Zeiger auf den String (erstes Zeichen), aber wenn '', dann Ersatzweise ein Zeiger auf die Konstante EmptyString mit #0#0
P := Pointer(S); // bei '' ist das hier NIL (wichtig, wenn man z.B. mit Leerstrings in der WinAPI arbeitet)
Oder String-Resourcen.
In dem PChar werden "Werte" bis #$0000FFFF als Index für die PE-Ressourcen benutzt, und darüber sind es Zeiger auf Strings.


Ich kenn Leute, die schreiben auch S := EmptyString; anstatt S := ''; , was per se nicht falsch ist, aber
ich hatte mal mit EmptyString eine böse Erfahrung.

Und auch wenn der "Code" so selbstsprechend ist, empfinde ich "Namen" als Konstante/Variable auf "etwas" und nicht als "Nichts" ... kann so den Code schlechter lesen.


Durch einen schiefen Pointer wurde dort etwas in EmptyString reingeschrieben, denn "typisierte String-Konstanten" sind in Wirklichkeit "schreibgeschützte Variablen", aber sie lassen sich dennoch beschreiben.
Mit dem Ergebnis, dass wir eine halbe Woche danach suchten, warum alle DevExpress-Grids im Programm in "leeren" Zellen plötzlich "etwas" anzeigten, denn sie nutzen auch EmptyString zu Initialisierung.
$2B or not $2B

Geändert von himitsu (10. Sep 2022 um 18:22 Uhr)
  Mit Zitat antworten Zitat