0

我正在实现一个 dbus 服务器,为了简化事情,我决定使用gdbus-codegen.

这个 hello world 示例及其存储库将生成头文件和源文件。然后它将信号连接到函数:

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在生成的标头中声明。如何使用它们?

4

1 回答 1

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)
于 2017-08-16T15:13:00.743 回答