Thanks! This sounds like just what I was looking for. ts <decoux / moulon.inra.fr> wrote in message news:<JOb47.35961$u76.1431106 / e420r-atl3.usenetserver.com>... > >>>>> "T" == Tobin Baker <senderista / hotmail.com> writes: > > T> I'm trying to solve the problem of how to trap a Ruby exception from a > T> C call to a Ruby method. > > Probably I've not understood what you want to do, but I'll write something > like this > > T> static VALUE > T> rorbit_apply_try(VALUE packed_args) > T> { > T> int argc; > T> VALUE *argv; > T> VALUE recv; > T> VALUE sym; > T> VALUE args; > > T> Check_Type(packed_args, T_ARRAY); > T> argc = RARRAY(packed_args)->len; > T> argv = RARRAY(packed_args)->ptr; > T> rb_scan_args(argc, argv, "3", &recv, &sym, &args); > T> Check_Type(args, T_ARRAY); > T> return rb_apply(recv, SYM2ID(sym), args); > T> } > > [...] > > T> // use rb_rescue to catch exception > T> VALUE packed_args = rb_ary_new3(3, servant->impl, > T> ID2SYM(rb_intern(name)), args); > > VALUE result; > VALUE packed_args = > rb_ary_new3(3, servant->impl, ID2SYM(rb_intern(name)), args); > int state = 0; > > result = rb_protect(rorbit_apply_try, packed_args, &state); > if (state) { > result = rb_gv_get("$!"); > /* do what you want */ > } > > > Guy Decoux