Hi,

In message "[ruby-talk:17864] Trapping Ruby exceptions from C"
    on 01/07/15, Tobin Baker <senderista / hotmail.com> writes:

|// use rb_rescue to catch exception
|    VALUE packed_args = rb_ary_new3(3, servant->impl, ID2SYM(rb_intern(name)), args);
|    VALUE error_holder = rb_class_new_instance(0, 0, rorbit_c_CORBA_ORBit_ErrorHolder);
|    results = rb_rescue(rorbit_apply_try, packed_args, rorbit_trap_exception, error_holder);
|    error = rb_iv_get(error_holder, "@error");
|
|Is there a way to retrieve an exception from the method called by
|rb_apply without having to use a helper class?

Use pointer to the variable, i.e.

static VALUE
rorbit_trap_exception(VALUE* error_holder, VALUE error)
{
    if (!RTEST(rb_obj_is_kind_of(error, rb_eStandardError)))
      *error_holder = rb_exc_new2(rb_eTypeError, "not an exception");
    else
      *error_holder = error;
    return Qnil;
}

...

    VALUE packed_args = rb_ary_new3(3, servant->impl, ID2SYM(rb_intern(name)), args);
    results = rb_rescue(rorbit_apply_try, packed_args, rorbit_trap_exception, (VALUE)&error);

Hope this helps.
							matz.