我正在尝试编写一些在GLib的GIO中使用DBus支持的C。
我有一个GDBusObjectManager
,并且我已经使用g_signal_connect()
向interface-added
信号添加了一个处理程序。根据文档,处理程序的签名为:
void
user_function (GDBusObjectManager *manager,
GDBusObject *object,
GDBusInterface *interface,
gpointer user_data)
我想检查添加的接口是否与我关心的接口(org.bluez.Adapter1
)相匹配,然后从实现该接口的对象上从该接口调用一些方法。我相信第一步是检查接口名称是否匹配。我相信我可以通过与const gchar *g_dbus_proxy_get_name(GDBusProxy *proxy);
的收益进行比较来做到这一点,但是我没有GDBusProxy
,我有GDBusInterface
。所以我的问题是:如何从GDBusProxy
中获得GDBusInterface
?
答案 0 :(得分:1)
GDBusInterface
是由GDBusProxy
类实现的接口,因此您已经拥有GDBusProxy
-您只需要将其转换为正确的类型即可,您可以使用G_DBUS_PROXY (interface)
。
根据您是否正在使用gdbus-codegen
生成的代理实例,然后可以使用生成的代码(例如{{1})中的宏来检查它是否是org.bluez.Adapter1
的代理实例。 };或者您可以使用MY_NAMESPACE_IS_ADAPTER1 (interface)
手动检查接口名称。
请注意,g_str_equal (g_dbus_proxy_get_interface_name (G_DBUS_PROXY (interface)), "org.bluez.Adapter1")
将返回代理所使用的众所周知的或唯一的总线名称,该名称与接口名称不同。 well known or unique name标识总线上的同位体(通常是另一个进程)。该同位体在对象路径处公开对象,并且每个对象都实现一个或多个接口。