Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Variable während der Laufzeit erzeugen (https://www.delphipraxis.net/49762-variable-waehrend-der-laufzeit-erzeugen.html)

Helmi 15. Jul 2005 15:50


Variable während der Laufzeit erzeugen
 
Hallo,

ein Programmierer bei mir in der Firma programmiert mit C++ und hat eine Software geschrieben, in der viele Variablen zur Laufzeit erzeugt werden.

Ich konnt ihn gestern mal ausquetschen wie er das macht und er sagte mir, dass er es mit einer Funktion "new" macht.
Er sagte mit dieser Funktion kann man Variablen zur Laufzeit erzeugen, Typ und Name angeben.

Gibt es so was auch bei Delphi?

Ich hab zwar auch bei Delphi ein "new" gefunden. Dieses braucht aber immer auch eine schon projektierte Variable (siehe Delphi-Hilfe zu "new").

Ich hab Delphi 7 Pro.

Aenogym 15. Jul 2005 16:07

Re: Variable während der Laufzeit erzeugen
 
hi,

also von strings weiß ich, dass es die funktion Delphi-Referenz durchsuchennewStr() gibt. die gibt auch einen pointer auf dne erstellen string zurück. ich bin sicher, dass es in delphi auch für andere typen so etwas gibt.

aenogym

Tyrael Y. 15. Jul 2005 16:17

Re: Variable während der Laufzeit erzeugen
 
Moin,

für native Typen wie String, Integer, Float usw. braucht man keinen Speicher zu besorgen, die Speicherverwaltung davon übernimmt Delphi.

Objekte werden mit einer Create Methode erzeugt...diese Method besorgt dne nötigen Speicher....die Methode Destroy dient dazu den Speicher wieder freizugeben...

Bei dynamischen Arrays zb kann man sich über New() den nötigen Speicher holen und mit Dispose() wieder freigeben....


..alles nur kurz angerissen...zu mehr Infos gibt es gute Tutorials und Bücher


Gruß

Tyrael

malo 15. Jul 2005 16:21

Re: Variable während der Laufzeit erzeugen
 
Zitat:

Zitat von Tyrael Y.
Bei dynamischen Arrays zb kann man sich über New() den nötigen Speicher holen und mit Dispose() wieder freigeben....

Macht man das nicht normalerweise mit Setlength? :gruebel:

Robert_G 15. Jul 2005 16:23

Re: Variable während der Laufzeit erzeugen
 
Dynamische Variablen? Sowas hast du doch nur wenn du dynamischen Code generierst. Da du den Delphi compiler nicht mitliefern darfst dürfte das wohl ausfallen.

SirThornberry 15. Jul 2005 16:46

Re: Variable während der Laufzeit erzeugen
 
New in Delphi kommt schon hinnt. Klar musst du dort bereits eine Variable übergeben, aber wie du sicherlich schon gesehen hast ist das ein Pointer.

Grundsätzlich läuft das ganze so ab. Man hat eine Variable welche ein Pointer ist (PInteger zum Beispiel ist ein Pointer auf einen Integer). Mit "New(PIntegerVariable)" fordert man dann speicher an und der Pointer(Adresse) auf diesen Speicher wird der Variablen "PIntegerVariable" zugewiesen.
Nun kann ich diesen Vorgang immer wieder holen und immer mehr speicher anfordern.
Allerdings sollte man sich die Pointer auch merken/speichern damit man den Speicher später auch wieder freigeben kann.

Ein Beispiel:
Delphi-Quellcode:
var LVariable: PInteger;
    LCount: Integer;
    LList: TList;
begin
  LList := TList.Create; //eine Liste in der wir uns die Variablen speichern (Pointer darauf)
  for LCount := 0 to 4 do //in unserem Beispiel holen wir 5 mal speicher
  begin
    new(LVariable); //Hiermit wird Speicher angefordert und die Adresse des Speichers wird dann der Variablen zugewiesen
    LList.Add(LVariable); //damit wir unseren angeforderten Speicher später auch noch nutzen können, speichern wir einen Pointer darauf in einer Liste
  end;
  //do anything with the list

  for LCount := 0 to LList.Count - 1 do
    dispose(LList.Items[LCount]); //angeforderten Speicher wieder freigeben
  LList.Free; //Liste freigeben
end;

Oxmyx 15. Jul 2005 16:48

Re: Variable während der Laufzeit erzeugen
 
Meistens verwendet man das Schlüsselwort "new" in C++, um dynamische Instanzen von Klassen zu erzeugen oder Arrays anzulegen. Mit Klassen funktioniert das so:
Code:
class eineKlasse;
...
void proc()
{
    eineKlasse eineInstanz;
    eineInstanz = new eineKlasse;   // neue Klasseninstanz erzeugen
    ...
}
In Delphi gibt's dafür den Konstruktor, der meistens "Create" heißt.

Delphi-Quellcode:
procedure bla;
var
  eineInstanz: eineKlasse;
begin
  eineInstanz := eineKlasse.Create;  // neue Klasseninstanz erzeugen
  ...
end;

Helmi 15. Jul 2005 17:10

Re: Variable während der Laufzeit erzeugen
 
Hallo,

danke für die Antworten!

Ich hab mir gerade dem seine Software durch den Kopf gehen lassen.

Er macht das so:

Es gibt eine Art Ini-Datei in der z. B. drin steht:
Zitat:

ID_TEXT_Hallo=Hallo
ID_TEXT_Hallo ist sozusagen die Variable als String-Variable und Hallo eben der String dieser Variable.

Er liest sich also diese Zeile ein und erstellt jetzt im Code eine String-Variable namens "ID_TEXT_Hallo".
Und dies macht er mit "new" (C++).

Diese Ini-Datei kann aber gute 50 oder mehr solcher Einträge enthalten.

Er sagte mir etwa von einem Identifier.

In seiner Software gibt er es etwa so an:
Delphi-Quellcode:
int new(ID_TEXT_Hallo)
Das ist jetzt nur sinngemäß - muss also nicht so stimmen wie es oben steht.

Geht das bei Delphi auch?

Oxmyx 15. Jul 2005 17:47

Re: Variable während der Laufzeit erzeugen
 
Vermutlich hat er sich diese Variablen eben angelegt, und lädt zur Laufzeit dann den Inhalt aus der Ini-Datei. Also z.B. so:

Code:
char* ID_TEXT_Hallo;

void LoadVars()
{
  /* Hier kommt jetzt Code, der aus der Ini-Datei den richtigen Eintrag
    heraussucht und die Länge des Strings ermittelt, z.B. bei "Hallo"
    ist die Länge 5 */

  ID_TEXT_Hallo = new char[5];

  /* Jetzt kann man irgendwelche beliebigen 5 Zeichen in den String
     ID_TEXT_Hallo reinschreiben... */
}


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