Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Umgang mit untypisiertem var-Parameter (https://www.delphipraxis.net/109182-umgang-mit-untypisiertem-var-parameter.html)

Dani 25. Feb 2008 19:56


Umgang mit untypisiertem var-Parameter
 
Kann man untypisierte var-Parameter so auf eine lokale Variable casten, dass ein indizierter Zugriff darauf möglich ist? Konkret habe ich diese Methode:
Delphi-Quellcode:
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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz