Der WideString ist und war immer "nur" eine Weiterleitung/Kapselung von Funktionen der oleaut32.dll
SysAllocStringLen
SysReAllocStringLen
SysFreeString
SysStringLen
Der UnicodeString ab Delphi 2009 ist dageben genauso aufgebaut, wie der AnsiString.
Das ist der Aufbau des UnicodeString (sowie des AnsiString):
Ab D2009 wurde nur noch das codePage und elemSize eingeführt, für das besch* umgesetzte StringChecking.
Delphi-Quellcode:
StrRec = packed record
codePage: Word;
elemSize: Word = SizeOf(WideChar);
refCnt: Integer;
length: Integer;
data: array[0..x] of WideChar;
null: Char = #0;
end;
Der interne String-Zeiger zeigt auf data[0] oder auf NIL, bei einem Leerstring.