Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Geeigneter Variablentyp für dynamischen Buffer (https://www.delphipraxis.net/61467-geeigneter-variablentyp-fuer-dynamischen-buffer.html)

ichbins 21. Jan 2006 19:28


Geeigneter Variablentyp für dynamischen Buffer
 
Hallo,

ich versuche jetzt schon 3 Tage vergeblich eine geeignet Variable für einen dynamischen Buffer zu finden.

Ich brauche einen Buffer, der praktisch unendlich groß werden kann (eine Anwendung: Bytewarteschlange zum Schreiben in Datei),
der aber bei seiner Standardgröße (4 KB) auch eben nur 4 KB (meinetwegen auch 5) belegt.

Bisher habe ich versucht das zu verwenden:
Delphi-Quellcode:
tbytebuffer=array of byte;
//zur Weitergabe als Funktionsparameter
pbytebuffer=^tbytebuffer;
darauf war aber nach einer blockread-Anwendung kein Zugriff mehr (EAccessError, ich denke, weil das Längebyte überschrieben wurde).

Es funktioniert zwar, wenn ich die blockread-Anweisung nicht so
Delphi-Quellcode:
blockread(f,buf,4096,res)
sondern so
Delphi-Quellcode:
blockread(f,pointer(integer(@buf)+4)^,4096,res)
aufrufe, aber dann habe ich auf einmal keinen Zugriff mehr auf einen Stringfunktionsparameter :gruebel: :wall:

was würdet ihr mir als Buffertyp empfehlen?

Chewie 21. Jan 2006 23:22

Re: Geeigneter Variablentyp für dynamischen Buffer
 
Array of Byte ist schon OK, aber du weißt vielleicht nicht, dass ein dynamisches Array, welches du hier deklarierst, bereits einen Zeiegr auf die tatsächlichen Daten darstellt. Ein Zeiger auf das Array ist also in der TAt ein Zeiger auf einen Zeiger.

Dax 21. Jan 2006 23:29

Re: Geeigneter Variablentyp für dynamischen Buffer
 
Wars nicht
Delphi-Quellcode:
pbuf := @tbuf[0];
? Beziehungsweise, bei direktem Verwenden, einfach buf[0]?

ichbins 22. Jan 2006 07:39

Re: Geeigneter Variablentyp für dynamischen Buffer
 
Danke :)

ich probiers mal aus:

im blockread auf buf[0] verweisen und pbuf = tbuf


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:07 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