![]() |
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. |
Re: Variable während der Laufzeit erzeugen
hi,
also von strings weiß ich, dass es die funktion ![]() aenogym |
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 |
Re: Variable während der Laufzeit erzeugen
Zitat:
|
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.
|
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; |
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:
In Delphi gibt's dafür den Konstruktor, der meistens "Create" heißt.
class eineKlasse;
... void proc() { eineKlasse eineInstanz; eineInstanz = new eineKlasse; // neue Klasseninstanz erzeugen ... }
Delphi-Quellcode:
procedure bla;
var eineInstanz: eineKlasse; begin eineInstanz := eineKlasse.Create; // neue Klasseninstanz erzeugen ... end; |
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:
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:
Das ist jetzt nur sinngemäß - muss also nicht so stimmen wie es oben steht.
int new(ID_TEXT_Hallo)
Geht das bei Delphi auch? |
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