From: Chris Uzdavinis Date: 2001-04-14T16:11:11+09:00 Subject: [ruby-talk:13656] create/init ruby object in C Hi, Ruby is great, kudos to all who are involved. I'm trying to embed ruby into an application, and I'm having a bit of trouble. I want to write a function (in C) that returns a ruby object from a class that I defined. For example, given this ruby class: class X attr_reader :x, :y, :z attr_writer :x, :y, :z end I want to write a C function that creates an instance of class X and initializes it. Here is how I'd do it in ruby, but how do I do it in C? def example a = X.new a.x = 111 a.y = 222 a.z = 333 return a end I've spent a while trying to come up with something, and most of that time has been spent reading ruby source code, since I don't know which API functions to call. Here is pseudo-code that is pretty close to what I want, except for all the errors in it. :) static VALUE example(VALUE self) { VALUE type, obj; ID id; // lookup type of X (how?) type = .... // // instantiate object of that type // (is this the Right Way to do it?) // obj = rb_obj_alloc(type); // // initialize members of obj x,y,z // (is this the Right Way to do it?) // id = rb_intern("X#x="); rb_funcall(obj, id, 1, INT2NUM(111)); id = rb_intern("X#y="); rb_funcall(obj, id, 1, INT2NUM(222)); id = rb_intern("X#z="); rb_funcall(obj, id, 1, INT2NUM(333)); // // the following is the only line in this function where I have // confidence in what I wrote. :) // return obj; } This isn't compiled or tested, but I think it shows what I'm trying to do (and shows how new I am to the internals of ruby.) I'm probably doing this all wrong, but if someone could help me finish/fix the above code such that it's equivalent to the ruby version, I'd be very appreciative. Many thanks for any help! -- Chris