Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Delphi 2009: String, UnicodeString oder WideString?

  Alt 3. Nov 2014, 18:09
Für den genauen Aufbau siehe System.pas, wo es auch seit 2009 ein paar Funktionen zum Auslesen/Bearbeiten gibt, vorallem von der CodePage.


WideString geht schon immer auf die OleAuth32.dll und stellt quasi nur einen Wrapper dar, welcher u.A. auf MSDN-Library durchsuchenSysAllocString weiterleitet. Dafür ist das praktisch in jeder Sprache verfügbar.

String ist ein compilerabhängiger "Alias" und geht auf AnsiString (D2 bis D2007), UnicodeString (seit D2009) und ShortString (D1, wobei es dort nur diesen String gab und es noch keine Alias war)

intern ist es ein aufgemotztes "dynamisches Array"
  • in Windows mit Offset von 1 -> Index 0 = Char 1, wegen Abwärtskompatibilität zum alten ShortString
  • Pointer zeigt auf erstes Zeichen, hinten gibt es noch zwei implizite #0
  • vor dem ersten Zeichen liegen die Integer Länge und Referenzzählung
  • und seit D2009 nochmal davor zwei Word für CodePage und CharSize
  • im Gegensatz zu den normalen dyn. Arrays funktioniert hier auch das CopyOnWrite (Bei Schreibzugriffen auf einzelne Zeichen, mit einem RefCount größer 1, wird eine Kopie angelegt und damit gearbeitet)
  • Konstanten haben einen RefCount von -1


PS: Schaut mal in die OH ... dort tut wirklich manchmal jemand was und man hat den String-Aufbau dort nun auch endlich mal dokumentiert.

Zitat:
außer bei nextgen
Ich bin mir nicht ganz sicher wer, aber entweder im Nextgen oder im Windows kann man per Compilerschalter das Verhalten umstellen.

Delphi-Referenz durchsuchenStringElementSize
Delphi-Referenz durchsuchenStringCodePage / Delphi-Referenz durchsuchenSetCodePage
Delphi-Referenz durchsuchenStringRefCount / Delphi-Referenz durchsuchenUniqueString
$2B or not $2B

Geändert von himitsu ( 3. Nov 2014 um 18:15 Uhr)
  Mit Zitat antworten Zitat