Ruby Data_Get_Struct 错误错误参数期望数据
Ruby Data_Get_Struct error wrong argument expect Data
我正在用一些非常简单的 classes 在 C:
中编写一个 ruby 模块
typedef struct window_t {
GtkWidget * widget;
}
static void c_window_struct_free(window_t *c)
{
if(c)
{
ruby_xfree(c);
}
}
static VALUE c_window_struct_alloc( VALUE klass)
{
return Data_Wrap_Struct(klass, NULL, c_window_struct_free,ruby_xmalloc(sizeof(window_t)));
}
VALUE c_window = rb_define_class_under(m_rtortosa, "Window", c_widget)
rb_define_method(c_window, "set_title",RUBY_METHOD_FUNC(window_set_title), 1);
//For each class I don't rewritte any "new" or "initialize" function. I let the default
当我的模块被初始化时,一个 gtk window 被创建,我有一个调用这个模块的 ruby 方法:
static VALUE rtortosa_window(VALUE self)
{
VALUE win;
VALUE m_rtortosa = rb_const_get( rb_cObject, rb_intern( "Rtortosa" ) );
VALUE cWindow = rb_const_get_at( m_rtortosa, rb_intern("Window") );
win = rb_class_new_instance(0, NULL, backbone.rb_objects.cWindow);
window_t *w;
Data_Get_Struct(win,window_t, w);
w->widget = backbone.window.widget;
return win;
}
当我从 ruby 调用 rtortosta_window 时出现问题,它会抛出这样的错误:
wrong argument type Rtortosa::Window (expected Data) (TypeError)
经过调查,此消息来自 Data_Get_Struct 函数。
我看不出我做错了什么,我有一个笔记本 class 是用同样的方式写的,但它按预期工作。
我忘记将 alloc 函数绑定到 class:
rb_define_alloc_func(c_window, c_window_struct_alloc);
我正在用一些非常简单的 classes 在 C:
中编写一个 ruby 模块typedef struct window_t {
GtkWidget * widget;
}
static void c_window_struct_free(window_t *c)
{
if(c)
{
ruby_xfree(c);
}
}
static VALUE c_window_struct_alloc( VALUE klass)
{
return Data_Wrap_Struct(klass, NULL, c_window_struct_free,ruby_xmalloc(sizeof(window_t)));
}
VALUE c_window = rb_define_class_under(m_rtortosa, "Window", c_widget)
rb_define_method(c_window, "set_title",RUBY_METHOD_FUNC(window_set_title), 1);
//For each class I don't rewritte any "new" or "initialize" function. I let the default
当我的模块被初始化时,一个 gtk window 被创建,我有一个调用这个模块的 ruby 方法:
static VALUE rtortosa_window(VALUE self)
{
VALUE win;
VALUE m_rtortosa = rb_const_get( rb_cObject, rb_intern( "Rtortosa" ) );
VALUE cWindow = rb_const_get_at( m_rtortosa, rb_intern("Window") );
win = rb_class_new_instance(0, NULL, backbone.rb_objects.cWindow);
window_t *w;
Data_Get_Struct(win,window_t, w);
w->widget = backbone.window.widget;
return win;
}
当我从 ruby 调用 rtortosta_window 时出现问题,它会抛出这样的错误:
wrong argument type Rtortosa::Window (expected Data) (TypeError)
经过调查,此消息来自 Data_Get_Struct 函数。
我看不出我做错了什么,我有一个笔记本 class 是用同样的方式写的,但它按预期工作。
我忘记将 alloc 函数绑定到 class:
rb_define_alloc_func(c_window, c_window_struct_alloc);