From: WATANABE Hirofumi Date: 2003-01-09T16:30:59+09:00 Subject: [ruby-dev:19329] [Ruby/DL] Bignum to ... わたなべです。 Win32API.rbを作っていてはまったんですが、たとえば % cat foo.c int foo(int i) { return i; } % cat foo.rb require 'dl' handle = DL::Handle.new("./foo.so") foo = handle.sym("foo", "II") p foo.call(0x80000000) % gcc -shared foo.c -o foo.so とした場合、実際に実行すると % ruby foo.rb foo.rb:5:in `call': bignum too big to convert into `int' (RangeError) from foo.rb:5 となります。これはNUM2INTやNUM2LONGを使っているためで、 0x80000000から0xFFFFFFFFまでが渡せません。 ここはNUM2UINTやNUM2ULONGを使う必要があると思います。 さらにrb_dlsym_initialize()ではポインタへの変換にも使われてますが、 saddr = (void*)(DLNUM2LONG(rb_Integer(addr))); こっちでも起こる可能性があります。 -- わたなべひろふみ