Autor Beitrag
JoKeR
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 06.05.03 09:03 
Hallo,
ich möchte eine Prozedur schreiben, bei der der Code zuerst generiert wird, weil der Code von vielen Bedingungen abhängig ist.

So dass man den auszuführenden Code in einen String packt und den String dann aufführt, wie ganz normalen Code!

Wie kann ich das einfach anstellen?

Mfg

JoKeR :wink:
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 06.05.03 09:06 
Delphi ist kein Interpreter. Kuck mal bei Torry nach einer Script-Komponete oder bei den Jedis ist, glaube ich, auch was passendes dabei.
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Di 06.05.03 09:09 
:lol: :roll: 8) ...das würden wir alle gerne machen können!

Im ernst: Das ist fast unmöglich...es sei denn du schreibst dir nen compiler, nur der kann wohl nix im laufenden programm anrichten. oder nimmst einen interpreter her, der aber langsam wäre und der auch nicht auf deine internen variablen zugreifen könnte...es sei denn es sind properties.

viel spass...lass es uns wissen, wenn du es geschafft hast :wink:

_________________
mfg.
mâximôv
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 06.05.03 09:24 
maximus hat folgendes geschrieben:
...und der auch nicht auf deine internen variablen zugreifen könnte...es sei denn es sind properties.

Ähm, was ist denn an Properties so anders? Solange er keinen Interpreter hat, kann er nichts machen. Wenn er einen hat (oder selber schreibt), kann er selbstverständlich sowohl auf Properties als auch auf interne Variablen zugreifen. Er muss halt nur entsprechende Schnittstellen im Interpreter definieren. Properties sind aber Schnittstellen des Compilers selber.

Cu,
Udontknow
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Di 06.05.03 09:46 
@UDontKnow: Ich denke Mr. JokeR wollte den code für/im laufenden prog ausführen und da sind dann alle variablen nur noch adressen (keine namen mehr...denke das ist dir bekannt), nur properties könnte er mit RTTI verarbeiten. viel mehr dann aber auch nicht...oder hasst einen weg gefunden, ohne properties auf fields zuzugreifen?

_________________
mfg.
mâximôv
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 06.05.03 10:30 
Wer sagt denn, das er überhaupt objektorientiert programmiert? :wink:

Das sind zwei verschiedene Paar Schuhe. Ich habe eigentlich schon versucht, es zu erklären.

Nehmen wir mal an, das Programm erhält den String "ShowMessage(Str1)".
Solange er nicht in irgendeiner Weise diesen String auswertet, kann er damit nichts anfangen.

Ein simpler Anfang, um soetwas wie einen Interpreter aufzubauen, wäre nun:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
if Pos('ShowMessage',CommandStr)>0 then
begin
  WertInKlammern:=ExtractWord(2,CommandStr,['(',')']);
  if WertInKlammern='Str1' then
    ShowMessage(Str1);
end;

Hierbei ist es egal, ob Str1 nun eine interne Variable ist oder ein Property, es muss eben nur die Schnittstelle des Interpreters dementsprechend aufgebaut werden.

Das ganze bezieht sich aber wie gesagt auf die Variablen des Programmes selber, welche ja von vornherein (Arrays und Listen lassen wir mal aussen vor) gegeben sind. Ein ordentlicher Interpreter sorgt natürlich auch noch für die Erzeugung von Variablen zur Laufzeit. Wenn man also die Anweisung "var x,y,z:Integer" übergibt, müsste das Programm sich die Namen und Typen dieser Variablen merken und Speicher für diese Variablen reservieren.

Cu,
Udontknow
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Di 06.05.03 10:56 
Wir sollten uns deswegen nicht streiten...is ja auch wurst.

Sagen wir es so: Ohne weiteres kann man auf normale variablen nicht zugreifen, es sei denn man macht einen unterbau :wink:

_________________
mfg.
mâximôv
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 06.05.03 11:04 
hihi... Wie willst du ohne "Unterbau" auf properties zugreifen? :mrgreen:

Nein, wir wissen, wie´s gemeint ist. Man könnte Code basteln, der zur Laufzeit nachguckt, welche Properties vorhanden sind. Aber: Das geht meines Wissens nach nur mit published Properties.

Cu,
Udontknow
JoKeR Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 06.05.03 11:41 
Ist es nicht möglich einen Delphibefehl, genau wie einen Dosbefehl in Delphi auszuführen?

z.B

mache(format c:)

oder halt in delphi

mache( messagebox('Test') )
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 06.05.03 12:10 
Schlicht und einfach: Ohne Interpreter lautet die Antwort "Nein".

Die DOS-Eingabeaufforderung bzw. das Programm "Format" interpretiert ja schliesslich auch. Es wird nachgeschaut welches Programm gestartet werden soll. Format interpretiert die Parameter, die übergeben wurden (wenn "C:" angegeben wurde, wird C: formatiert).

Cu,
Udontknow
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Di 06.05.03 14:14 
hihi...

Udontknow hat folgendes geschrieben:
hihi... Wie willst du ohne "Unterbau" auf properties zugreifen? :mrgreen:

Nein, wir wissen, wie´s gemeint ist. Man könnte Code basteln, der zur Laufzeit nachguckt, welche Properties vorhanden sind. Aber: Das geht meines Wissens nach nur mit published Properties.

Cu,
Udontknow
..dafür muss ich nur die unit typInfo einbinden und fertig is der lack! Der unterbau ist ja schon in delphi drinn und nennt sich rtti :wink: Und ja...es geht nur mit published-props.

aber lassen wir das

_________________
mfg.
mâximôv
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 06.05.03 14:36 
Wäre schön, wenn es mit dem Einbinden einer Unit getan wäre. Fertig ist der Lack dann noch lange nicht. Du musst eben, wie oben schon angedeutet, die Schnittstelle zwischen Interpreter und Programm basteln.

BTW: In .NET lassen sich Objekte wirklich komplett ohne Beschränkungen zur Laufzeit analysieren. Felder, Methoden und deren Namen, deren Parameter und deren Namen. Das gefällt mir eigentlich ganz gut.

Cu,
Udontknow
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Di 06.05.03 17:32 
Aber ich muss nicht explizite if-abfragen, ala 'if WertInKlammern='Str1'...', machen, wie du es vorgeschlagen hast, sondern kann ausdrücke, ala 'root.item[2].ding.text' relativ einfach auflösen(sofern mir 'root' bekannt ist). Habs selbst schon umgesetzt...behauptet ja auch niemand, dass das einfach ist...aber elegant :wink: Und code brauch man ja immer ..um was hinzukriegen.

fertig is der lack 8)

_________________
mfg.
mâximôv