【发布时间】:2012-02-24 11:12:52
【问题描述】:
我需要一些建议,如何将 C/C++ 结构绑定到 Ruby。我阅读了一些手册,并了解了如何将类方法绑定到类,但我仍然不明白如何绑定结构字段并使其在 Ruby 中可访问。
这是我正在使用的代码:
myclass = rb_define_class("Myclass", 0);
...
typedef struct nya
{
char const* name;
int age;
} Nya;
Nya* p;
VALUE vnya;
p = (Nya*)(ALLOC(Nya));
p->name = "Masha";
p->age = 24;
vnya = Data_Wrap_Struct(myclass, 0, free, p);
rb_eval_string("def foo( a ) p a end"); // This function should print structure object
rb_funcall(0, rb_intern("foo"), 1, vnya); // Here I call the function and pass the object into it
Ruby 函数似乎假定a 是一个指针。它打印指针的数值而不是实际内容(即["Masha", 24])。显然,Ruby 函数无法识别这个对象——我没有设置对象的属性名称和类型。
我该怎么做?不幸的是,我无法弄清楚。
【问题讨论】:
-
不是答案,但是你有没有考虑过使用swig.org,它会自动为你生成这个接口代码。
-
rb_funcall(0, rb_intern("p"), 1, vnya)应该也可以工作 ;-)
标签: c++ ruby ruby-c-extension