Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#15

Re: String in Listview Data ?

  Alt 30. Mär 2010, 15:30
Naja, PChar hat keine Längenangabe und daher wird #0 meist als Ende interpretiert. Das kann man umgehen indem man anstelle von PChar einfach ^String verwendet. Somit kann man durch dereferenzieren auch die Compilermagic etc. nutzen und hat keine Probleme wenn einmal #0 vorkommt (gerade bei UTF8, Unicode etc. sehr sinnvoll)
Dein Beispiel würde dann also so aussehen:
Delphi-Quellcode:
var
  p: ^String;

new(p);
p^ := myStr;
AItem.Data := p;
[...]
Somit kann man alles (abgesehen vom notwendigen dereferenzieren) wie gewohnt machen und muss nicht plötzlich auf Funktionen wie StrCopy zurück greifen welche genannte Nachteile haben. Das kopieren durch direkt Zuweisung könnte damit durchaus sogar schneller sein weil ein normaler String eine Längenangabe besitzt wo hingegen bei PChar erst nach der abschließenden #0 gesucht wird um zu wissen wie groß die zu kopierenden Daten sind.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat