2005-12-30
■ CでRubyモジュールを作る
PerlのXSがsoを読み込むPerlモジュールファイル(.pm)を必要とするのに比べて、Rubyのrequireは.soファイルを直接読み込んでくれるので、ちょっとばかり簡単です。
.soの作り方は、svn.ruby-lang.orgにあります。
static VALUE
rb_hello_c(self)
VALUE self;
{
return rb_str_new2("Hello C");
}
void
Init_hoge()
{
VALUE rb_cHoge = rb_define_class("Hoge", rb_cObject);
rb_define_alloc_func(rb_cHoge, rb_hoge_s_alloc);
rb_define_private_method(rb_cHoge, "initialize", rb_hoge_initialize);
rb_define_method(rb_cHoge, "hello_c", rb_hello_c);
}
.soと.rbで同名の拡張モジュールにしたい場合は、.soと.rbを同じところにおき、.rb側に
◆hoge.rb
require 'hoge.so'
class Hoge
def hello_rb
"Hello Ruby"
end
end
と書けば、.rbが先に読み込まれ、続いて.soが読み込まれます。
◆hoge_test.rb require 'hoge' hoge = Hoge.new puts hoge.hello_c puts hoge.hello_rb
