Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Mär 29, 2024 00:22

Foren-Übersicht » Sonstiges » Meinungen zu den Projekten
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: So Jun 08, 2008 13:55 
Offline
DGL Member
Benutzeravatar

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

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 08, 2008 13:58 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 15, 2008 18:14 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 15, 2008 18:31 
Offline
DGL Member
Benutzeravatar

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:
Code:
  1.  
  2. // ...
  3. type
  4.   TTestClass = class (TThoriumPersistent)
  5.   private
  6.     // ...
  7.   published
  8.     property TestStr: String read FTestStr write FTestStr;
  9.     property TestInt: Integer read FTestInt;
  10.     property TestFlt: Double read FTestFlt write FTestFlt;
  11.   end;
  12.  
  13.   TTestClass2 = class (TThoriumPersistent)
  14.     // ...
  15.   private
  16.     // ...
  17.   published
  18.     property TestObj: TTestClass read FTestObj;
  19.   end;
  20.  
  21. // ...
  22.  
  23. var
  24.   Module: TThoriumModule;
  25.   Engine: TThorium;
  26.   Test: TFileStream;
  27. begin
  28.   Engine := TThorium.Create;
  29.   try
  30.     Engine.ExtendedTypeRegistry.RegisterRTTIType(TTestClass);
  31.     Engine.ExtendedTypeRegistry.RegisterRTTIType(TTestClass2);
  32.    
  33.     Module := Engine.NewModule;
  34.     Test := TFileStream.Create('testscript.txt', fmOpenRead);
  35.     try
  36.       if not Module.CompileCode(Test) then
  37.       begin
  38.         WriteLn('Compilation failed: ');
  39.         WriteLn(Module.LastCompilerError);
  40.         Exit;
  41.       end;
  42.     finally
  43.       Test.Free;
  44.     end;
  45.     // Debugausgaben usw...
  46.   finally
  47.     Engine.Free;
  48.   end;
  49. 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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 15, 2008 18:38 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 15, 2008 19:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Eine verwendung könnte dann z.B. so aussehen:
Code:
  1. public void main(TTestClass2 obj)
  2. {
  3.   obj.testobj.teststr = "hallo welt";
  4. }


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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 07, 2008 19:37 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
du hattes vorher was von Code schicken gesagt giebt es den derzeit eine möglichkeit sich diesen anzuschauen (würd mich interessieren)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 07, 2008 19:42 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Sonstiges » Meinungen zu den Projekten


Wer ist online?

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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.417s | 19 Queries | GZIP : On ]