我正在实现一个dbus服务器,为简化起见,我决定使用gdbus-codegen
。
This hello world example和it'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
。如何使用它们?
答案 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)