如何使用gdbus-codegen生成的类型?

时间:2017-08-16 13:43:35

标签: c++ c gio gdbus

我正在实现一个dbus服务器,为简化起见,我决定使用gdbus-codegen

This hello world exampleit's repository将生成标头和源文件。然后它将信号连接到函数:

g_signal_connect (interface, 
                  "handle-hello-world", 
                  G_CALLBACK (on_handle_hello_world), NULL);

我的问题是下一个:

  • GType min_min_bus_gdbus_get_type (void)应该做的功能是什么?它已声明,但未在生成的文件中定义。
  • 而不是将信号连接到回调函数(如上所述),我可以以某种方式使用生成的标头中声明的struct MinMinBusGDBUSIface吗?

我在网上找到的任何例子都有这两件事(*_get_type (void)函数声明,并在生成的标题中声明struct *Iface。如何使用它们?

1 个答案:

答案 0 :(得分:0)

在玩完这个例子之后,我终于找到了答案,以及如何获得对界面结构的访问,以及如何设置它。这是无处可寻的,并没有在任何地方记录。

在查看生成的源文件后,函数GType min_min_bus_gdbus_get_type (void)可能会被巨大的宏观定义,但我不确定它的功能,以及如何使用它。

有一种方法可以使用struct MinMinBusGDBUSIface宏(再次在生成的标头中)访问MIN_MIN_BUS_GDBUS_GET_IFACE

要设置函数回调,示例中的这一行:

g_signal_connect (interface, 
                  "handle-hello-world", 
                  G_CALLBACK (on_handle_hello_world), NULL);

可以替换为:

MinMinBusGDBUSIface* iface = MIN_MIN_BUS_GDBUS_GET_IFACE(interface);
iface->handle_hello_world = &on_handle_hello_world;

并且必须修改回调以具有与函数回调相同的签名:

static gboolean
on_handle_hello_world (MinMinBusGDBUS *interface, 
                       GDBusMethodInvocation *invocation,
                       const gchar *greeting)