我需要一些建議如何將C/C++結構綁定到Ruby。我已經閱讀了一些手冊,並且發現瞭如何將類方法綁定到類,但是我仍然不明白如何綁定結構字段並使它們在Ruby中可訪問。如何將C/C++結構綁定到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函數不能識別這個對象—我沒有設置對象的屬性名稱和類型。
我該怎麼做?不幸的是我無法弄清楚。
不是一個答案,但你有沒有考慮使用http://www.swig.org/,它會自動爲你生成這個接口代碼。 – jupp0r 2012-02-24 11:38:42
'rb_funcall(0,rb_intern(「p」),1,vnya)''應該也能工作;-) – Reactormonk 2012-02-24 14:31:39