Strings kannst du über WM_COPYDATA nicht übertragen.
Er packt ja alles in einen Stream. Das geht schon klar.
Statt
StringOfChar
nimm hier lieber
SetLength
. Macht keinen wirklichen Unterschied, sollte aber performanter sein.
Dein wirkliches Problem ist allerdings, dass du
len
-Bytes ausliest und nicht
len * SizeOf(Char)
bzw.
len * SizeOf(sbuf[1])
.
Hier brauchst du den String auch nicht Zeichen für Zeichen schreiben, sondern kannst analog zur "Auspacken" Routine direkt mit
Stream.Write(S[1], Length(S) * SizeOf(S[1]))
arbeiten.