AW: Cast Array[0..x] of Byte in TBytes
Zitat:
Delphi-Quellcode:
nach
TBytes
Delphi-Quellcode:
läßt sich Casten, da die nötigen Daten des statischen arrays im dynamischen enthalten sind, solange das dynamische Array mindestens so groß ist, wie das Statische.
Array[0..x] of Byte
Aber in diesem Fall kommt man um ein Umkopieren nicht drumrum. |
AW: Cast Array[0..x] of Byte in TBytes
Der TIdIOHandler nimmt aber auch u.a. Streams an. Ich habe mir vor einiger Zeit schon eine kleine Klasse von TCustomMemoryStream abgeleitet, der ich im Konstruktor einen bereits bestehenden Puffer - wie z.B. ein statisches Array - und dessen Länge übergeben kann. So wandelt man irgendwelche Daten ohne umkopieren in einen Stream :stupid:
Ob es hier aber nicht vlt. einfacher und sinnvoller wäre, den aufrufenden Code an TBytes anzupassen, kann ich nicht beurteilen. |
AW: Cast Array[0..x] of Byte in TBytes
@Uwe Raabe:
Die Nutzdaten haben das selbe Layout: Einfach 1024 Bytes hintereinander. Die Verwaltungsinformationen (auf die Delphi intern zugreift) sind für diese Speicherbereiche unterschiedlich. Und im konkteten Fall der Write-Methode sind nur die Nutzdaten relevant. Genau aus diesem Grund muß ja auch die Länge des Speicherbereichs mit übergeben werden. Und damit ist ein Typecast im Gegensatz zu Deiner Behauptung im konkreten Falle sehr wohl möglich. Sorry - aber es wie im Kindergarten... :lol: Jeder will hier auf Biegen oder Brechen Recht behalten. Ist irgendwie lächerlich und schade um die vergeudete Zeit.. :stupid: Und wie überflüssig das Ganze ist, sieht man am Beitrag des Fragestellers: Es hat bei ihm (im speziellen Fall) funktioniert. Auch bei
Delphi-Quellcode:
treten (bei mir) keine Speicherfehler auf.
ReportMemoryLeaksOnShutdown:=true;
Aber die Theoretiker beharren auf ihrer Meinung... :stupid: @Deep-Sea: Interessante Idee! :thumb: |
AW: Cast Array[0..x] of Byte in TBytes
Auch wenn ich mich ungern in die Schussbahn einer so hitzigen Diskussion begebe, wollte ich es trotzdem los werden:
Zitat:
Delphi-Quellcode:
sieht so aus:
AContext.Connection.IOHandler.Write
Delphi-Quellcode:
.
LLength := IndyLength(ABuffer, ALength, AOffset);
Und die zweite Zeile der Funktion IndyLength enthält wiederum das:
Delphi-Quellcode:
Hier wird also auf die Länge des dyn. Arrays mittels Length zugegriffen. Das das gut geht ist reine Glückssache ...
LAvailable := IndyMax(Length(ABuffer)-AIndex, 0);
Dein Code funktioniert also, sofern man die Funktion selbst geschrieben hat und auf Length verzichtet. Allgemein ist es aber leider eine tickende Zeitbombe ... |
AW: Cast Array[0..x] of Byte in TBytes
PS: Ist denn unbedingt ein statisches Array notwendig?
Einfach TBytes nehmen und am Anfang ein
Delphi-Quellcode:
und schon kann man das Array direkt übergeben.
SetLength(a, 1000);
Wenn irgendwo, in deinem Code, sowas wie @a vorkommt, dann dieses durch @a[0] ersetzen und das Selbe auch noch bei Var-Parametern. Zitat:
|
AW: Cast Array[0..x] of Byte in TBytes
Zitat:
Delphi-Quellcode:
schreiben, dann passt es immer, auch für statische Arrays die nicht mit 0 beginnen :stupid:
@a[Low(a)]
|
AW: Cast Array[0..x] of Byte in TBytes
Zitat:
Deshalb ja auch meine Bemerkung Zitat:
|
AW: Cast Array[0..x] of Byte in TBytes
Zitat:
|
AW: Cast Array[0..x] of Byte in TBytes
Ich weiß nicht, wie alt Du bist und ob Du viel mit andere Menschen zu tun hat (Kinder, Schüler, Praktikanten, Angestellte,...).
Ist aber eigentlich auch egal: Aus meiner Sicht ist oftmals der Ton wichtiger als der Inhalt. Und genau dieser Umgangston läßt in vielen Foren arg zu wünschen übrig... Aber das ist Offtopic: Wenn Du Interesse hat, können wir das auch gern per PM besprechen. |
AW: Cast Array[0..x] of Byte in TBytes
Hallo....
nu kommt doch bitte auf den Boden zurück. Können wir uns darauf einigen, daß Typecasting ein ganz heißes Eisen ist, und daß man damit sehr zurückhaltend und vorsichtig umgehen sollte? (und Pointer gehören in die gleiche Kathegorie?) Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 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