Kann man untypisierte var-Parameter so auf eine lokale Variable casten, dass ein indizierter Zugriff darauf möglich ist? Konkret habe ich diese Methode:
function TRandomStream.Read(var Buffer; Count: Integer): Longint;
Nun muss ich Teilbereiche von "Buffer" wieder als typenlosen var-Parameter übergeben, vom Prinzip her also so:
Delphi-Quellcode:
function TRandomStream.Read(var Buffer; Count: Integer): Longint;
var
Buf: TByteArray;
begin
Buf := TByteArray(Buffer);
BytesWritten := FRndBuf.Read(Buf[13], 5); //14. bis 19. Zeichen in Buffer einlesen.
end;
Das funktioniert aber nicht so richtig, denn anstelle der Adresse des 14. Zeichens wird mit Buf[13]
der Wert des 14. Zeichens etwas Undefiniertes übergeben. Überhaupt ist für mich "Buffer" ein großes Fragezeichen, denn SizeOf(Buffer) liefert Null und der Debugger hält den Wert von Buffer für nicht verfügbar. Wie macht man das richtig?
Edit: habe jetzt herausgefunden, dass Buffer zum ersten Byte des Speicherblocks ausgewertet wird. Also müsste eigentlich Folgendes funktionieren:
Delphi-Quellcode:
function TRandomStream.Read(var Buffer; Count: Integer): Longint;
var
Buf: TByteArray;
begin
Buf := TByteArray(@Buffer);
BytesWritten := FRndBuf.Read(Buf[13], 5); //14. bis 19. Zeichen in Buffer einlesen.
end;
Ist zwar schön, dass jetzt keine
AV mehr kommt, aber geht das nicht schöner?
Dani H.
At Least I Can Say I Tried