Das kann man nicht casten, da es sich um unterschiedliche Datentypen handelt, die auch ein unterschiedliches Speicherlayout haben.
Da muß ich leider widersprechen: Auch wenn es sich im programmtechnischen Sinn um verschiedene Typen handelt (dynamisches vs. statisches Array), so liegen dennoch in beiden Fällen die Daten byteweise hintereinander. Damit haben sie sehr wohl das selbe Speicherlayout.
Durch den Umstand, daß die Write-Methode den Parameter ABuffer als Konstante erwartet, wird vom Compiler nur die Anfangsadresse des Arrays übergeben. Und damit ist es völlig egal, ob es sich dabei um den Beginn eines dynamischen oder eines statischen Arrays handelt.
Ein kleines Beispiel:
Delphi-Quellcode:
procedure Test(const ABuffer: TBytes; ALength: Integer);
var
n: Integer;
s: String;
begin
s:='';
for n:=0 to ALength-1 do
begin
if s<>''
then s:=s+',';
s:=s+IntToStr(ABuffer[n]);
end;
ShowMessage(s);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
n: Integer;
a: array[0..9] of Byte;
b: TBytes;
begin
//dynamisches Array:
SetLength(b,10);
for n:=Low(b) to High(b) do
b[n]:=n;
Test(b,10);
//statisches Array:
for n:=Low(a) to High(a) do
a[n]:=n;
Test(TBytes(@a[0]),10); //<- Typecast
end;
Das heißt: Ein Typecast ist sehr wohl
möglich. Ob er auch
sinnvoll ist, steht auf einem ganz anderen Blatt...