Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Programm im Durchlauf speichern


Rachel_Hannah - Fr 04.05.07 17:01
Titel: Programm im Durchlauf speichern
Hi Leute,
ich soll für ne Präsentation in der Schule ne Registermaschine programmieren. Zur Zeit hapert es bei mir daran, dass ich zwar die einzelnen Prozeduren alle hinbekomme, aber nicht in der Lage bin während des Durchlaufens des Programms neue Programmteile zu schreiben bzw. zu speichern.
Um das ganze nochmal zu verdeutlichen, die Registermaschine ist einem überdimensionalen, programmierbaren Taschenrechner gleichzusetzen. Die einzelnen Rechnungen funktionieren zwar, aber wenn ich sie verknüpfen soll, weiß ich nicht wo und wie ich diese speichern kann, sodass ich in der Folge aus dem gleichen Programm darauf zugreifen kann.
Freue mich schon auf alle Hinweise.
Gruß
Rachel


Narses - Fr 04.05.07 17:39

Moin!

user profile iconRachel_Hannah hat folgendes geschrieben:
Registermaschine programmieren. Zur Zeit hapert es bei mir daran, dass ich zwar die einzelnen Prozeduren alle hinbekomme, aber nicht in der Lage bin während des Durchlaufens des Programms neue Programmteile zu schreiben bzw. zu speichern.

Hä? :gruebel: Selbstmodifizierender Code, oder was... :?!?:

user profile iconRachel_Hannah hat folgendes geschrieben:
Um das ganze nochmal zu verdeutlichen

...solltest du uns mal ein wenig Code und/oder Beispiele zeigen, ich zumindest kann dir bei deinem Problem nicht folgen. :nixweiss:

cu
Narses


zongo-joe - Fr 04.05.07 17:42

hm... klingt nach einem recht grundsätzlichen problem:
-> hast Du schon mal was in Delphi programmiert ?

sonst würd eich Dir erstmal einen Crashkurs empfehlen:

http://www.delphi-treff.de/content/tutorials/einsteigerkurs/
http://www.christian-stelzmann.de/downloads.php?name=crashkurs_reloaded
http://www.delphi-library.de/profile.php?mode=viewprofile&u=BenBE&forcestr=1
Oder schau doch mal in derTutorial-, FAQ- und Buch-Sparte nach. Dort wirst du einiges finden.


Rachel_Hannah - Sa 05.05.07 00:43

ja, ich arbeite schon seit 2 jahren mit delphi und bilde mir ein zumindest die grundlegenden möglichkeiten zu beherrschen.
ich möchte jetzt aber während der runtime befehle eingeben und abspeichern, sodass diese in der folge in gleicher reihenfolge wieder abgefragt werden können.
geht das? und wenn ja, wie?
quelltext hilft da auch nicht, es geht um die prinzipielle möglichkeit!
rachel


JayEff - Sa 05.05.07 02:34

Ein Programm (im win32 Format - nicht .NET - darüber weiß ich nix ;) ) besteht aus Binärcode, genauer, Assembler. Delphiprogramme bilden da keine Ausnahme. Es gibt prinzipiel 2 bzw 3 Möglichkeiten, zur Laufzeit Code in deinem Programm zu verändern/hinzuzufügen.
1: Baue einen kompletten Suche in: Delphi-Forum, Delphi-Library INTERPRETER ein (Siehe dazu z.B. das Open Source Projekt um den Brainfuck-Interpreter. Es kam kurzzeitig zur Ansprache, dass man den BF-Interpreter mit Code aus einer Resource füttern kann. Delphi eignet sich nicht wirklich dafür, aus einer Resource gelesen zu werden, da ein zugehöriger Interpreter viel zu komplex ist!), der den Code aus einer Resource lädt. Diese lässt sich auch nach dem Compilieren noch ändern.

2: Lerne Suche in: Delphi-Forum, Delphi-Library ASSEMBLER und editiere die Exer per Hex-Editor bzw. lass das ein Programm für dich machen. Dazu ist seeehr viel Grundwissen in Assembler, aber auch dem Aufbau von Exe-Dateien notwendig.

Die dritte Möglichkeit wäre, wenn auch beschränkt, über Suche in: Delphi-Forum, Delphi-Library DLLs. Dazu musst du den Code, den du ausführen willst, aber erst per Delphi in eine DLL compilieren, welche dann von deinen Programm ausgelesen werden kann.

In deinem Fall solltest du vielleicht "einfach" eine eigene Skriptsprache erfinden (bzw. eine vorgefertigte nehmen) die deinen Anforderungen genügt, dann ("einfach") einen Interpreter dazu schreiben, fertig. Ist in meinen Augen die einzige Möglichkeit, da DLLs ausfallen und Assembler a)zu kompliziert ist und b)wie die sprichwörtliche auf den Spatz zielende Kanone ist.


ssb-blume - Sa 05.05.07 11:45

Ganz einfach:

Die eingegebenen Befehle einzeln speichern (in List o.ä.)
dann bei Bedarf wieder auslesen und wie eine Tastatur-Eingabe behandeln.