Moin!
Das stimmt schon - so wurde es früher gemacht. Die als ShortString bekannten Strings arbeiten immernoch so, daher haben diese eine Beschränkung auf maximal 255 Zeichen und im 0. Zeichen ([0]) steht auch tatsächlich die Länge drin. Und für die heutigen AnsiStrings gilt dies nicht mehr, SirThornberry hat ja schon gut erläutert das man in das Byte keine Längenangabe für 2 GB reinbekommt. Da die Strings aber kompatibel sein sollten so dass die Anwender nicht eine Routine für ShortString und eine für AnsiString schreiben müssen, deshalb gibt es [0] bei AnsiStrings auch noch, nur das hier der Compiler bei einem direktem Zugriff abblockt. Zum Beispiel gibt die Hilfe zu SetLength() an, das sie bei ShortStrings nur das Längenbyte [0] setzt und bei anderen Strings Speicher alloziiert.
@SirThornberry: Die Einschränkung mit String und
DLL gilt nur für AnsiString, da diese mit internen Referenzen arbeiten - im Gegensatz dazu hat man mit WideStrings oder ShortStrings keine Probleme (keine Referenzen).
MfG
Muetze1
/EDIT: einmal Pizza aus dem Ofen geholt, schon 5 Posts zu spät...