AnsiString <> WideString/UnicodeString geschiht automatisch
PAnsiChar <> PWideChar nicht, weil Delphi nicht einfach so Speicher reservieren kann, es ja nicht wissen kann, wie danach dieser Zeiger/Speicher verwaltet wird.
Die Folge wären massieve Speicerlecks.
StrPCopy will einen PWideString, aber FN ist ein AnsiChar.
StrPCopy(Result, WideString(FN));
Wenn Delphi da immernoch meckert aber PAnsiChar nach WideString sollte möglich sein, dann
StrPCopy(Result, WideString(AnsiString(FN)));
oder gleich so und einige Zwischenschritte einsparen
Delphi-Quellcode:
function GetString(Stream : TStream; Len : Word) : PWideChar;
var
FN : AnsiString;
begin
SetLength(FN, Len);
Stream.Read(@FN1[1] , Len);
Result := WideStrAlloc(succ(Len));
StrPCopy(Result, WideString(FN));
end;