![]() |
Delphi-Version: 7
Pointer eines dynamischen Arrays übergeben
Hallo,
Ich möchte gerne einen Inhalt dynamisch zurückgeben, da meine Funktion mehrere Ausgaben haben soll (werden mittels Thread verarbeitet, was dann die Übergabe eines Pointers verlange). U.a. möchte ich gerne, dass eine Dateienliste übergeben wird. Meine Typen sind: Type Teinedatei=record Url:string; Bla:integer; ... End; Tdateien:Array of Teinedatei; Tdateienpointer:^Tdateien; In einer Procedure wollte ich dann gerne die Länge festlegen und die Daten einfügen. Das funktioniert aber nicht :( Procedure setzen(p:pointer); Begin ... // Berechnung etc. Setlength(Tdateien(p),1); //geht nicht Setlength(p,1); // geht auch nicht Tdateien(p)[0].url:='123'; //geht natürlich nicht End; Aufruf mittels: var dateien:Tdateien; Begin Setzen (@dateien); Showmessage (dateien[0].url); End; Wie ist dafür die richtige Syntax? Denn für einen "normalen" Pointer (Teinedateipointer) funktioniert das. Geht das wegen dem dynamischen Array garnicht, oder gibt ist dort Kniffe wie ich das machen kann? Vielen Dank schonmal für eure Hilfe!! :-) |
AW: Pointer eines dynamischen Arrays übergeben
.. soweit ich das weiß, ist das Dynamische Array schon ein Pointer.
Grüße Klaus |
AW: Pointer eines dynamischen Arrays übergeben
Dereferenzieren mit Circumflex:
Delphi-Quellcode:
Aber wie Klaus schon schrieb ist der Umweg nicht nötig. Du kannst direkt dein Array übergeben, da es eh schon ein Pointer ist. Zur Sicherheit als var-Parameter - ich weiß nicht ob Delphi bei dyn. Arrays sonst copy-on-write macht.
Procedure setzen(p:pointer);
Begin ... // Berechnung etc. Setlength(Tdateienpointer(p)^, 1); // müsste gehen End; |
AW: Pointer eines dynamischen Arrays übergeben
Hallo,
Du hast Tdateien als Variable und nicht als Typ deklariert. Es sollte wahrscheinlich
Delphi-Quellcode:
heißen.
Tdateien = Array of Teinedatei;
Dann funktioniert auch
Delphi-Quellcode:
Setlength(Tdateien(p),1); //geht doch
Tdateien(p)[0].url:='123'; |
AW: Pointer eines dynamischen Arrays übergeben
Zitat:
Hingegen funktioniert super:
Delphi-Quellcode:
Ich danke euch vielmals für die Hilfe!! :-)
Setlength(Tdateienpointer(p)^, 1); // müsste gehen
|
AW: Pointer eines dynamischen Arrays übergeben
Delphi-Quellcode:
ist der interne Zeiger auf den ArrayInhalt.
Pointer(ArrayVariable)
So lange später nur auf den Inhalt zugegriffen und die Länge nicht mehr geändert wird, ist dieser Zeiger gültig und entspricht TDateien.
Delphi-Quellcode:
ist der Zeiger auf "diese" Variable und entspricht somit PDateien bzw. ^TDateien.
@ArrayVariable
Hier kann auch die Länge/Referenz des Arrays geändert werden, aber nur so lange, wie diese Variable existiert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:21 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