Wie aus der Deklaration ersichtlich, erwartet GetString ein TBytes, also ein dynamisches Byte-Array. Dagegen ist TReadBuffer ein statisches Byte-Array.
Dein Code lässt sich auf folgendes reduzieren:
Delphi-Quellcode:
function TCustomWSocket.SocketRead(Socket: TSocket; Flag: integer): string;
var
Received: longint;
i: integer;
bytes: TBytes;
begin
Result:= '';
Received:=0;
if Received = SOCKET_ERROR then
begin
if WSAGetLastError <> WSAEWOULDBLOCK then
SocketError(WSAGetLastError);
end
else
if Received>0 then begin //05.11.10: Fix bei .SocketRead: bei Länge 0 gab es RangeError beim Zugriff auf Result[1]
SetLength(bytes, Received);
for i := 1 to Received do
bytes[i-1] := FReadBuffer[i];
Result := TEncoding.Default.GetString(bytes);
end;
end;
Ich gehe mal davon aus, dass der eigentliche Receive-Code, der Received und FReadBuffer setzt, bewusst entfernt wurde.