es ist reines glück das im Editor kein Fehler kommt. Anstelle von
MazeStream.Read(TmpStr, StrLength);
muss es
MazeStream.Read(TmpStr[1], StrLength);
heißen. Denn ein String, ein dynamisches Array etc. sind etwas mehr als nur Speicherplatz. Dahinter verbirgt sich eigentlich ein Pointer auf die eigenltichen Daten mit Referenzzählung, Längenangabe etc.
Mit TmpStr[1] gibst du sozusagen das erste Zeichen des Strings an und somit wird ab diesem Byte der String beschrieben und nicht die Stelle wo der Pointer etc. sonst ist.
Im übrigen musst du vorher natürlich auch die Größe des Strings setzen!
Delphi-Quellcode:
SetLength(TmpStr, StrLength);
MazeStream.Read(TmpStr[1], StrLength);