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
SysAllocString 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.
StringElementSize
StringCodePage /
SetCodePage
StringRefCount /
UniqueString