AnsiString und UnicodeString und Ableitungen von AnsiString ala RawByteString und UTF8String sind LongStrings (die Technik)
WideString ist ein OLEString.
Der Typ String[x] und ShortString sind ShortStrings.
ShortString = Record (LängenByte in [0] und dahinter die Chars)
LongString = dynamisches Array mit ein paar Addons, wie implizit zwei Char #0 inher dem String und die Codepage wird auch gespeichert (Pointer auf die String-Verwaltungsstruktur)
OLEString = siehe BSTR und
SysAllocStringLen
PS: Die genauen Definitionen kann man sich in der System.pas ansehen und inzwischen wird das sogar in der
OH gut beschrieben.
MakeStr ist ein Graus.
Bei weniger als 2 (genauer bei Len=1) knallt es nur zufäälig nicht, wegen der zusätzlichen zwei #0 im String, aber du zerstörtst/überschreibst damit diese Verwaltungsdaten, welche für Casts nach PChar existieren.
Und bei Len=0 knallt der Aufruf definitiv, da ein Leerstring NIL ist und keine Verwaltungsdaten besitzt, in die du reinschreiben könntest.
Zitat:
ich möchte keine Diskussion über Nutzen/Zweck/Sinnhaftigkeit etc. des QT erzeugen
Warum nicht?