2011-09-13 1 views
0

HI,c에서 루비 Exception 클래스 객체의 확장은 무엇입니까? 다음은 내가 루비 스크립트에서 호출 C 코드를 다음 한

static VALUE myMethod(VALUE self, VALUE exc) 
{ 
    int a = TYPE(exc); 
    printf(" %d ", a); 
    // Some process on exc 
} 
void Init_myRuby() 
{ 
    VALUE mRuby = rb_define_module("myRuby"); 
    VALUE mException = rb_define_class_under(mRuby, "Exception", rb_eRuntimeError); 
    rb_define_singleton_method(mRuby, "myMethod", myMethod, 4); 
} 

require 'myRuby' 
def raiseExc() 
exception = myRuby::Exception.new("status","lasterror","function()","Calling some") 
myRuby::myMethod(exception, "Exception message: %s, Exception object %d", "Hi from Exception", 100) 
end 
raiseExc() 

내가 MyMethod라는 루비 클라이언트에서() 함수를 호출, 루비 클라이언트 스크립트의 코드입니다. 아무도 내게 C 파일과 그 모든 속성에서 Exception 클래스 객체 "exc"에 접근하는 법을 말해 줄 수 있습니까?

+0

모듈의 이름은 대문자로 시작해야합니다 EXC 가정

#description 방법을했다. –

답변

1

exc 개체의 메서드를 호출하려면 rb_funcall을 사용하십시오. 당신이 인수를 지정해야하는 경우의

VALUE myVar; 
myVar = rb_funcall(exc, rb_intern("description"), 0) 

:

VALUE myVar; 
myVar = rb_funcall(exc, rb_intern("foobar"), 3, 
    rb_float_new(2.5), 
    INT2FIX(123), 
    rb_str_new2("Hello World") 
)