![]() |
Ersatz für PBytes
Hallo,
jemand hat einen Bug in DEC (Delphi Encryption Compendium, ![]() gefunden, der darauf basiert, dass die vorhergehenden Entwickler an vielen Stellen PByte als Datentyp benutzt haben, was ja bekanntlich ein Zeiger auf einen 32K großen Byte Block ist. Verarbeitet man nun Daten die größer als 32K sind, gibt's einen RageCheckError. Soweit so klar. Die Lösung kann auch nicht sein den Range Check auszuschalten, auch nicht selektiv an den Stellen. Der Melder schlägt vor ( ![]() eigenen Arraytypen zu definieren:
Delphi-Quellcode:
Man könnte darauf basierend ja einen Zeiger Typen irgendwie deklarieren, aber ich bin mir da noch recht im unklaren:
TDECByteArray = array[0..MaxInt-1] of Byte;
Grüße TurboMagic |
AW: Ersatz für PBytes
Zitat:
Delphi-Quellcode:
ist ein Zeiger auf ein
PByte
Delphi-Quellcode:
. Wo kommen jetzt die "32 K" her?
Byte
Update: Du meinst ![]() ![]()
Delphi-Quellcode:
type TByteArray = array [0..32767] of Byte;
|
AW: Ersatz für PBytes
.. da gibt es doch auch noch
![]() Welches in der Größe variable ist. Gibt es auch in ![]() Grüße Klaus |
AW: Ersatz für PBytes
Zitat:
|
AW: Ersatz für PBytes
Alternativ könntest Du auch mit Streams anstelle array of whatever arbeiten, theoretisch endloser speicher...
|
AW: Ersatz für PBytes
TByteDynArray oder PByte + Länge würden sich anbieten. Oder wie KodeZwerg schrieb: Ein Stream (TMemoryStream oder was auch immer). Letzteres ist am flexibelsten, dürfte aber größere Änderungen am Code erfordern.
|
AW: Ersatz für PBytes
Muss mir das mal die nächsten Tage durch den Kopf gehen lassen.
Soweit ich auswendig weiß wird das nämlich viele Code-Stellen betreffen und es wird denke ich oft mittels Index zugegriffen. Man will aber andererseits auch keinen Speicher verschwenden, weshalb ein Stream evtl. auch nicht die richtige Lösung ist, da der ja wohl immer weiter anwächst je mehr Daten man rein schreibt. Sonst müsste man welche am Anfang löschen. Da käme mir aber auch ein Ringpuffer in den Sinn, wobei ich da ja sogar eine generische Variante hätte die sogar per GetIt verfügbar ist... Man müsste in dem Fall aber beim Erzeugen wiessen, wie groß das ist, das sollte sich aber dann vermutlich aus der Blockgröße beim initialisieren des Algorithmus bereits ergeben. :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz