2017-08-16 316 views
0

我正在实施一个dbus服务器,为了简化事情,我决定使用gdbus-codegen如何使用由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,如何使用他们?

+0

是的,C是与C++不同的语言。你想在C *或* C++中获得答案吗? – Toby

+0

@Toby我知道他们是不同的,但答案应该是相同的C和C + +。 –

回答

0

与例如播放完毕后最后我想通了答案,以及如何访问界面结构,以及如何设置它。这是无处可寻,不记录任何地方。


前前后后呃看着生成的源文件,函数GType min_min_bus_gdbus_get_type (void)可能被定义为一个巨大的宏观空间,但我不确定它的功能,以及如何使用它。


有通过使用MIN_MIN_BUS_GDBUS_GET_IFACE宏的访问struct MinMinBusGDBUSIface(再次在所生成的报头)的一种方式。

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

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) 
+0

“这是无处可查,并没有记录在任何地方。”它被证明:GObject手册。这是一个标准的GObject类型定义,假设如果你使用'gdbus-codegen',你已经阅读了关于如何使用GObject。这里的手册:https://developer.gnome.org/gobject/stable/index.html –

+0

@PhilipWithnall谢谢。甚至没有一个例子显示这一点。所有与“g_signal_connect” –

相关问题