小林です。

いやはや、こんな夜遅くにたちまちレスをいただけるとは!
ありがとうございます。

----- Original Message -----
送信者 : Yasushi Shoji <yashi / yashi.com>
件名 : [ruby-list:19693] Re: Book : rb_obj_call_init()


> # あと、こういうネタなら ruby-extがありまふ
わかりました、次回からはそちらにします。

>
> > さらに、TEST_add()では
> >   ...............
> >     obj = rb_obj_alloc(cTEST);
> >     rb_obj_call_init(obj,0,0);
> >     v = malloc(......);
> >    obj = Data_Wrap_Struct(obj,0,TEST_delete,v);
> >   return obj;
>
> Data_Wrap_Struct()は、ruby.hによると、klass, mark, free, ptrの順番で
> argumentを取るので、objがあやしいかと‥。
>
> return Data_Wrap_Struct(cTEST, 0, TEST_delete, v)
>
> くらいじゃないですかね?
> --
これも、やってみましたが同じでした。
あれこれやっているうちに、
     obj = rb_obj_alloc(cTEST);
     rb_obj_call_init(obj,0,0);
を、削除したらうまくいきました。
Data_Wrap_Struct()が新たにobjectを生成しているようなので、
rb_obj_alloc()は要らないようです。この解釈でよろしいのでしょうか?

小林 茂雄
E-Mail: shigeo / tinyforest.gr.jp
Home Page: http://www.tinyforest.gr.jp