c++ 获取g_signal_query等任何函数的参数信息

uajslkp6  于 2023-02-26  发布在  其他
关注(0)|答案(1)|浏览(99)

我在提取任何信号

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_foreachGtkTreeViewRowSeparatorFunc)或其他函数抽象为一个通用回调函数
我的问题:有没有办法得到函数所期望的参数列表?

v8wbuo2f

v8wbuo2f1#

可以,如果使用GObject introspection,它提供元数据(XML和二进制格式)来描述CABI。内省数据通常由语言绑定使用,这也是您正在做的事情。

相关问题