NIEMALS für die Übertragung/Speichern/
IPC dynamische Typen verwenden

> String und PChar sind compilerabhängig.
Delphi-Quellcode:
hSize := Length(aMsg);
hStream.Write(PChar(aMsg)^, hSize); // du überträgst x Bytes, aber deine Chars sind alle doppelt so groß.
WideString/UnicodeString + PWideChar
Oder besser noch UTF8String+PAnsiChar, um ein paar Bytes zu sparen.
Length(S) * SizeOf(Char)
oder
StringElementSize
Ein Therapeut entspricht 1024 Gigapeut.