Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Exceptions beim Embedding in C++
BeitragVerfasst: 03 Apr 2007, 17:45 
Offline
Nuby

Registriert: 14 Sep 2006, 01:22
Beiträge: 3
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]


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 03 Apr 2007, 19:35 
Offline
Hacker
Benutzeravatar

Registriert: 05 Sep 2006, 12:09
Beiträge: 403
Zitat:
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.

Da machst du so schöne Sachen und vergisst eine Suchmaschine zu bemühen :)
Z.B.
http://www.rubycentral.com/book/tut_exceptions.html

ist ganz ganz einfach....


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 03 Apr 2007, 20:28 
Offline
Nuby

Registriert: 14 Sep 2006, 01:22
Beiträge: 3
heyho,
ne exception wird ja sicher so oder so geschmissen, mein prob ist die aus ruby rauszubekommen und in c damit was gescheites zu machen.

danke trotzdem :D


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 03 Apr 2007, 21:05 
Offline
Nuby

Registriert: 14 Sep 2006, 01:22
Beiträge: 3
so hab grad rausgefunden dass rb_exec() nicht vom typ void ist, sondern vom typ int der nicht 0 ist, wenn ein Fehler auftritt. Das ist schon mal viel Wert. Wenns so läuft wie ich will bau ich nen Tutorial.

Schönen Abend


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 03 Apr 2007, 21:27 
Offline
Hacker
Benutzeravatar

Registriert: 05 Sep 2006, 12:09
Beiträge: 403
Zitat:
mein prob ist die aus ruby rauszubekommen und in c damit was gescheites zu machen.


achso... meine c-kenntnisse sind leider nicht mehr aktuell und etwas eingestaubt (aber man konnte doch irgendwie die ausgaben abfangen ??!!) dann hatte ich dich falsch verstanden.




Zitat:
as ist schon mal viel Wert. Wenns so läuft wie ich will bau ich nen Tutorial.


das wäre schön, poste dann mal den link, würde mich auch interessieren.

grüße *derheutealleskleinschreiber*


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 04 Apr 2007, 12:32 
Offline
Geselle
Benutzeravatar

Registriert: 09 Aug 2006, 11:49
Beiträge: 148
Also so wie ich das bei Python vermutet hätte isses anscheinend nicht. Einzige Möglichkeit scheint rb_rescue zu sein:




VALUE rb_rescue(VALUE (*func1)(), void *arg1, VALUE (*func2)(), void *arg2) :: Calls the function func1, with arg1 as the argument.  If an exception occurs during func1, it calls func2 with arg2 as the argument.

_________________
[code=]class<<self;define_method(%_>6E9@50>:DD:?8_.tr(%_0-f_,%_\_-t_)){|*_|@_\
=_};end;(Just another Ruby hacker!);(_,@_=@_;$><<_<<%_ _)while@_;$><<$/[/code]


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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: