我在提取任何信号
g_signal_query(g_signal_lookup (name_of_signal, G_OBJECT_TYPE (instance_of_gtk_object)), &signal_info);
callback_object->signal_id = signal_info.signal_id;
callback_object->signal_name = signal_info.signal_name;
callback_object->itype = signal_info.itype;
callback_object->signal_flags = signal_info.signal_flags;
callback_object->return_type = signal_info.return_type;
callback_object->n_params = signal_info.n_params;
callback_object->param_types = signal_info.param_types;
[...]
closure = g_cclosure_new_swap (G_CALLBACK (connect_callback), callback_object, NULL);
int ret = g_signal_connect_closure (instance, callback_event, closure, after);
正如你所看到的,这给了我一个GSignalQuery的列表,包括名称,GType,参数位置等等。所以我创建了一个结构体,并将其传递给一个泛型函数。在这个函数上,我读取了这个结构体,并在VA列表之间循环,创建了GValue
现在,我将其他函数(如gtk_tree_selection_selected_foreach、GtkTreeViewRowSeparatorFunc)或其他函数抽象为一个通用回调函数
我的问题:有没有办法得到函数所期望的参数列表?
1条答案
按热度按时间v8wbuo2f1#
可以,如果使用GObject introspection,它提供元数据(XML和二进制格式)来描述CABI。内省数据通常由语言绑定使用,这也是您正在做的事情。