Registriert: Di Mai 18, 2004 16:45 Beiträge: 2621 Wohnort: Berlin
Programmiersprache: Go, C/C++
Wärend des compilierprozesses gibt es keine rtti informationen, so kannst du auch keine referenzen zur compilerzeit über rtti holen.
Ich denke du meinst eher die TClass.methodepointer(name); oder so ähnlich, die arbeiten auf vtable und ned auf rtti und sind zur compilezeit verfügbar aber die properties nicht.
Bei Freepascal ist ein Objekt Pascal/FPC parser dabei(ich weiss den klassennamen leider nicht mehr aber es ist ne klasse, wo du text rein gibst und dann er dir den code parsed, gibt auch ein generic parser für implementierung anderer sprachen in fpc rtl), bei pasdoc ist ein Objekt Pascal parser dabei.
Bei Macro basierten Wrapperklassen wird die Orginalklasse verwendet, welche durch Macros und/oder weiteren Klasse verarbeitet wird.
statt bla=class(...) procedure SetText(text:string); end; machst du z.B. scriptclass(bla,...) AddMethode(Text,string) endscriptclass.
Sieht schlimm aus, erstellt eine Klasse, wo die Scriptimplementierung gleich mit drin ist und ist nicht wirklich transparent.
Ich mag die Variante garnicht.
Email steht in meinen Profiel, einfach schicken und ich guck mal rein.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ahm, ich meinte nicht die Compiletime von FPC oder Delphi sondern vom Script. Und da habe ich die RTTI-Infos schon.
Ich schick dir dann mal den Code...
//Edit: Geht nicht, an deine Mail-Addy komme ich nicht ran, da gibts nur ein Textmail senden-Formular.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: So Mai 11, 2003 10:36 Beiträge: 285 Wohnort: Oldenburg
Programmiersprache: Object Pascal
Das Projekt klinkt Interessant. Ich habe auch schon mehrmals versucht eine sehr einfache Scrip Sprache zu erstellen, bin aber an verschiedene Problem gescheitert sie zu lösen.
Ich habe auch noch nie eine Scrip Sprache in Verbindung mit "Object Pascal" genutzt.
Habt ihr mal ein kleines Beispiel parat ? ich weiß legendlich das es in vielen Gelegenheiten eine Script Sprache praktisch sein kann z.b. in Spielen und so.
Aber ich kann mir einfach nicht vorstellen wie eine Scrip Sprache mit dem Haupt Projekt zusammen arbeiten kann.
Nehmen wir doch mal ein einfaches Beispiel.
Ich habe ein Spiel, wo ich gerne möchte das es von außen erweiterbar ist.
Z.B. Der Spieler soll seine eigenen Spieler Objekte erstellen, eigene Levels die eine Script Sprache brauchen.
z.b. bei Clonk wird eine Script Sprache eingesetzt.
Ich frage mich wie das ins Projekt eingebaut werden kann.
_________________ MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Also... Wegen deim Einbau in ein Projekt (also in eine Hostumgebung).
Ich habe mich hierbei für eine sehr flexible Schnittstelle entschieden. Eine Variante dieser ist die Anbindung von Klassen über RTTI (Runtime Type Information), sodass der Entwickler praktisch nichts weiter tun muss, als seine Klasse vor dem ersten Compilieren eines Scripts an die Scriptengine zu übergeben. Ab diesem Zeitpunkt ist der Klassenname Scriptglobal als Typ registriert und kann verwendet werden. So ist die Schnittstelle zu Properties von Objekten gegeben. Methoden müssen dennoch über eine separate Schittstelle portiert werden, da diese keine RTTI generieren.
Der Hauptcode meiner Testumgebung sieht im Moment so aus:
Test := TFileStream.Create('testscript.txt', fmOpenRead);
try
ifnot Module.CompileCode(Test)then
begin
WriteLn('Compilation failed: ');
WriteLn(Module.LastCompilerError);
Exit;
end;
finally
Test.Free;
end;
// Debugausgaben usw...
finally
Engine.Free;
end;
end.
Dabei werden zunächst natürlich im Programm die Klassen deklariert und dann im Hauptcode an die Engine übergeben.
Ich hoffe, damit ist deine Frage erstmal beantwortet
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: So Mai 11, 2003 10:36 Beiträge: 285 Wohnort: Oldenburg
Programmiersprache: Object Pascal
Ist ja Praktisch.
Also brauche ich meine Klassen nur von TThoriumPersistent ableiten und schon kann ich sie in meinen Scripten verwenden?
nur schade das es eine C++ Syntax ist und keine Object Pascal Syntax.
Wenn das Projekt Fertig ist, werde ich es mal ausprobieren. Klinkt ja recht einfach.
Kannst du auch noch ein Beispiel zeigen wie ich das Objekt dann in der Script-Datei verwende ?
_________________ MFG<br> Michael Springwald, <br>
Bitte nur Links in Deutsch, nutze überwiegend Lazarus
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Eine verwendung könnte dann z.B. so aussehen:
Code:
public void main(TTestClass2 obj)
{
obj.testobj.teststr = "hallo welt";
}
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Naja, wenn sich irgendwer das unbedingt antun will, dann möge er mir eine PM/Mail schreiben mit seiner E-Mail Adresse und der bindenden versicherung, diesen Code für keinen anderen Zweck als denjenigen des Anschauens zu verwenden.
Wenn ich mit Thorium durch bin und den Code veröffentlich wird da natürlich eine andere Lizenz dranhängen, aber erstmal muss es dabei bleiben.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Mitglieder in diesem Forum: 0 Mitglieder und 24 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.