Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array als Referenz einer Methode übergeben (https://www.delphipraxis.net/143739-array-als-referenz-einer-methode-uebergeben.html)

TheMiller 22. Nov 2009 10:54


Array als Referenz einer Methode übergeben
 
Hallo,

ich habe hier zwei Methoden in einer eigenen "Bibliotheks-Unit" (eigene Zusammenstellung nützlichen Methoden), die mir Schreibarbeit ersparen sollen.

Ich möchte in der Programm-Unit ein dynamisches Array erstellen und dann die Prozedur "AddSQLFields" aus besagter Bib-Unit aufrufen. Dieser soll das zuvor erstellte Array erweitern und die übergebenen Werte eintragen. Wenn alle Werte eingetrage sind, soll eine andere Funktion das Array durchgehen und eine SQL-Query basteln.

Nun möchte ich kein globales Array anlegen. Ich würde gerne das Array als Pointer den Methoden übergeben, sodass diese direkt auf das Array zugreifen.

Nun ist ja ein Array schon ein Pointer. Könnt ihr mir Tipps geben, bitte?

Vielen Dank im Voraus

jfheins 22. Nov 2009 10:57

Re: Array als Referenz einer Methode übergeben
 
Du könntest ein
Delphi-Quellcode:
procedure bla(a:array of const)
übergeben - dann solltest du aber nicht das array an sich ändern (sondern nur die elemente)

TheMiller 22. Nov 2009 10:59

Re: Array als Referenz einer Methode übergeben
 
Hm das wäre nicht so toll. Diese Prozedur, an die das Array übergeben wird, erweitert nämlich das Array.

jfheins 22. Nov 2009 11:01

Re: Array als Referenz einer Methode übergeben
 
Hmmm ... dann kannte mal probieren ob das hier geht:
Delphi-Quellcode:
procedure bla(var a:array of const)
wäre zumindest logisch, aber ob das compiliert ... keine Ahnung ^^

TheMiller 22. Nov 2009 11:03

Re: Array als Referenz einer Methode übergeben
 
Probiere ich gleich mal aus. Kann man aber nicht das ganze mit "^" und "@" lösen?

EDIT: Kompiliert nicht. Inkompatible Typen

TheMiller 22. Nov 2009 12:44

Re: Array als Referenz einer Methode übergeben
 
Hm... bis jetzt habe ich noch keine Lösung, aber eine weitere Idee, die ich allerdings für sehr unschön halte. Deshalb wollte ich fragen, was ihr davon haltet:

Und zwar könnte ich doch von der Methode, die Daten ins Array hinzufügt, mir das neue Array zurückgeben lassen. Das Problem ist ja, dass in der Funktion nicht das Array aus der Haupt-Unit verwendet wird, sondern ein neues erstellt wird. Wenn ich mir das zurückgeben lasse, könnte ich durch "hin-und-her-schieben" von Arrays die Werte addieren.

Wie gesagt, es ist sehr unschön, aber mir fällt keine andere Lösung ein.. Oder könnt ihr mich davon durch andere Lösungen abhalten?

taaktaak 22. Nov 2009 13:08

Re: Array als Referenz einer Methode übergeben
 
Verstehe ich das richtig?
Meinst du so etwas...

Delphi-Quellcode:
type tNumArray = Array of Byte;

var NumArray : tNumArray;

procedure AddNumbers(var a:tNumArray);
begin
  SetLength(a,High(a)+3); // add 2 numbers
  a[High(a)-1]:=44;
  a[high(a) ]:=55;
end;

procedure TfoTest03.FormShow(Sender:TObject);
var i : Integer;
begin
  SetLength(NumArray,Listbox1.Items.Count);

  for i:=0 to Listbox1.Items.Count-1 do       // array aus listbox1
   NumArray[i]:=StrToInt(Listbox1.Items[i]);  // füllen

  AddNumbers(NumArray);                       // array erweitern

  for i:=0 to high(NumArray) do               // array in listbox2
   Listbox2.Items.Add(IntToStr(NumArray[i]))  // anzeigen
end;

TheMiller 22. Nov 2009 13:20

Re: Array als Referenz einer Methode übergeben
 
Ja, genau so, nur ohne globalem Array.

Ich möchte durch verschiedene Methoden auf ein Array zugreifen, welches ich vorher übergebe - eben um die globalen Arrays zu vermeiden.

DeddyH 22. Nov 2009 13:24

Re: Array als Referenz einer Methode übergeben
 
Bei Ralphs Methode kannst Du aber das Array auch in FormShow lokal deklarieren.

TheMiller 22. Nov 2009 13:26

Re: Array als Referenz einer Methode übergeben
 
Stehe ich gerade auf dem Schlauch? Ist der Vorschlag von Ralph genau das, was ich wollte? Ich kann's grad nicht testen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:21 Uhr.
Seite 1 von 2  1 2      

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