hallidrioho,
da mir ruby sehr sympatisch ist

wollte ich es in meinem cpp spiel als scriptsprache für levels etc einsetzen (so ähnlich wie bei wc3 JASS). hab auch schon eine recht hübsche beispielapplikation gezaubert, scheitere aber grandios daran, exceptions die beim ruby interpretieren auftreten irgendwie sinnvoll aufzufangen.
erstmal mein code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
main.cpp #include <ruby.h> #include <iostream> #include <string> #include <vector> #include "header.h"
#ifdef __cplusplus extern "C" #endif
void Init_rubytest();
using namespace std;
vector<TimerTrigger> triggerList;
void Entity::explode(){ cout<<"BOOOM!!"<<endl; }
TimerTrigger::TimerTrigger(int time){ this->timeRemaining = time; triggerList.push_back(*this); cout<<"ich schreib mich in die triggerListe"<<endl; }
void test_fnk(){ cout<<"bin die testfunktion"<<endl; }
int main() { ruby_init(); ruby_script("embedded"); rb_load_file("test.rb");
Init_rubytest();
ruby_exec(); cout<<"test.rb durch, keine fehler"<<endl;
while(triggerList.size() > 0){ for(int i=0; i< triggerList.size(); i++){ triggerList[i].timeRemaining--; cout<<triggerList[i].timeRemaining; if(triggerList[i].timeRemaining <= 0) { triggerList.clear(); rb_eval_string("kabumm"); } } } ruby_finalize(); return 0; }
|
header.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
#include <ruby.h> #include <string>
using namespace std;
class Entity { public: void explode(); int position; };
class Trigger { string name; };
class TimerTrigger;
class TimerTrigger : public Trigger { public: int timeRemaining; string action; TimerTrigger(int time); };
void test_fnk();
|
und der wunderschöne rubycode:
test.rb
1 2 3 4 5 6 7 8 9 10 11 12
|
def kabumm @gubbi.explode end
puts "test.rb geladen"
Rubytest.test_fnk()
@gubbi = Rubytest::Entity.new()
bla = Rubytest::TimerTrigger.new(9)
|
und schlussendlich die ausgabe:
1 2 3 4 5 6
|
test.rb geladen bin die testfunktion ich schreib mich in die triggerListe test.rb durch, keine fehler 876543210BOOOM!!
|
zusätzlich hab ich mit SWIG noch eine wrapper_wrap.cxx erstellt die das binding macht, dh ein modul mit namen Rubytest einbaut.
So, jetzt meine Frage: Wie kriege ich es jetzt hin, dass wenn ich zB in der ruby datei syntaxfehler mache, er mir die ausgibt. Um präzise zu sein, wie funktioniert das Exceptionhandling.
Hoffe ich bin hier im richtigen Forum und wäre superglücklich wenn mir jemand einen entscheidenden Tipp geben könnte.
Danke fürs zuhören

und schöne Grüße
[moderation=daniel]verschoben nach Core[/moderation]