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 関数はこのオブジェクトを認識できません。オブジェクトのプロパティ名と型を設定していません。
これどうやってするの?残念ながら、私はそれを理解することはできません。