Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dynamisches Array referenzieren (https://www.delphipraxis.net/136091-dynamisches-array-referenzieren.html)

JanW 23. Jun 2009 11:21


Dynamisches Array referenzieren
 
Hallo.
Delphi ist im Prinzip Neuland für mich, bisher hab ich immer Sprachen verwendet die diese Sachen intern behandeln, jetzt steh ich grad auf dem Schlauch.
Hab zwar ein riesiges Pascalbuch hier, aber das Thema ist unzureichend erklärt.



Ich habe ein dynamisches Array of Char in Funktion 1. Es ist weder initialisiert noch hat es irgendwelche Werte, das soll dann in Funktion 2 passieren, aber so dass ich in Funktion 1 danach mit dem Array weiterarbeiten kann.

Konkret was passiert also:
- Funktion 1 deklariert ein dynamisches Array. Nennen wir es mal ABC.
- ABC wird an irgendwie an Funktion 2 weitergegeben
- Funktion 2 kopiert dann aus einem bereitsbestehendem Array einen Teil in ABC[] (Das ist das kleinste Problem denke ich. Das geht ja mit Move)
- Funktion 1 schickt ABC dann weiter an andere Prozeduren.
(Geht um WAVE-Streaming mit OpenAL)

1. Kann man das mit Zeigern geschickt lösen?
2. Geht das mit einem "Open Array", wenn ja: Wie ist denn das zu bewerkstelligen?

Ich hab Stunden im Internet gesucht hab aber nichts gefunden dass mir hilft.
Es geht hier um eine sehr sehr zeitkritische Anwendung, das heißt die Lösung muss schnell sein.



Ich wär euch verbunden wenn mich jemand erleuchten würde. Ich komm einfach nicht selbst drauf, meine Lösungsanstäze scheitern. Weil ich einfach noch nie mit Pointern gearbeitet habe, und es einfach nicht klappen will das dyn. Array als Argumentreferenz zu übergeben.
Code sollte ja kein großer anfallen, ich muss einfach nur dieses dynamische Array als Referenz in Funktion 2 kriegen.

Gruß,
Jan

P.s.: WENN es sich mit Zeigern lösen lässt, dann würd ich die Lösung bevorzugen weil das noch oft auf mich zukommen wird in dem Projekt und ich das endlich mal richtig lernen muss.

Klaus01 23. Jun 2009 11:27

Re: Dynamisches Array referenzieren
 
Hallo,

im Prinzip sollte es in etwas so laufen:

Delphi-Quellcode:
type
  TCharArray = Array of Char;


function function2(CharArray: TCharArray):???
function function1(...):???

implementation

function function2(CharArray: TCharArray):???
begin
  // tue etwas mit CharArray
end;

function function1(..):???;
var
  CharArray: TCharArray;

begin
  setLength(CharArray,25);
  function2(CharArray);
end;
Grüße
Klaus

Satty67 23. Jun 2009 11:29

Re: Dynamisches Array referenzieren
 
Hoffe, hab' das Problem nicht falsch verstanden.

Das dynamische Array muss für beide Bereiche die gleiche Definition haben...
Delphi-Quellcode:
type
  TABC = array of Integer;

procedure Main;
var
  ABC : TABC;
begin
  SetLength(ABC, 10);
  // mit ABC irgend etwas machen
  ABCManipulator(ABC);
end;

procedure ABCManipulator(var aABC : TABC);
var
  i : Integer;
begin
  for i := Low(aABC) to High(aABC) do
    aABC[i] := 0;
end;
€: Immer wieder Red-Box... ;)

himitsu 23. Jun 2009 11:37

Re: Dynamisches Array referenzieren
 
wenn das Array verändert werden soll, dann das VAR nicht vergessen
Delphi-Quellcode:
function function2(var CharArray: TCharArray):???
und ein dynamisches Array ist ja schon intern ein Zeiger auf seinen Inhalt.

[add] jupp, die nette RedBox :mrgreen:

JanW 23. Jun 2009 11:38

Re: Dynamisches Array referenzieren
 
Super.
Danke an euch, das scheint so einwandfrei zu funktionieren.
Wie ich jetzt auf Pointer gekommen bin weiß ich auch nicht :mrgreen:


Wieder was gelernt.

Gruß,
Jan


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