Nicht nur unterschiedlich verwaltet, was sich via ShareMem lösen liese.
Im Jahre 2009 wurde auch die Struktur der LongStrings geändert.
* früher gab es vor den Chars nur Felder/Variablen für Length und Referenzzähler
* jetzt gibt es zusätzlich noch Felder für die CodePage und die CharSize.
Neue Delphis auf alten Strings, würden also auf beim Kopieren des Strings auf nichtexistierende Felder zugreifen
und die Speicherverwaltung würde jeweils mit einem falschen Offset den internen Anfang des Strings falsch bestimmen.
Hier mal ein böses Beispiel, was für einen Aufwand man bekommt, wenn man dennoch Delphi-Strings zwischen DLLs/EXE übergeben möchte.
https://www.delphipraxis.net/213736-...-fuer-neu.html
ShareMem verbindet nur den SpeicherManager, aber dennoch haben
DLL und EXE weiterhin jeweils eigene Funktionen für die Verwaltung des Strings.
Delphi 2 bis 2007 sind bezüglich dem AnsiString somit noch kompatibel, was die Verwaltungsfunktionen der Strings angeht (ShareMem vorausgesetzt)
oder eben alles ab 2009 bis "jetzt", wo AnsiString sowie UnicodeString kompatibel wären.
Ja, sogar AnsiString und UnicodeString/String sind per se untereinander kompatibel, ABER seitdem das StringChecking wieder deaktiviert wurde, stimmt das nur bedingt.