如何将 GDBusInterface 转换为 GDBusProxy?
How can I convert a GDBusInterface into a GDBusProxy?
我正在尝试编写一些使用 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);
中的 return 进行比较来做到这一点,但我没有 GDBusProxy
,我有 GDBusInterface
。所以我的问题是:如何从 GDBusInterface
得到 GDBusProxy
?
GDBusInterface
是由 GDBusProxy
class 实现的接口,所以你已经有了 GDBusProxy
——你只需要将它转换为正确的类型,您可以使用 G_DBUS_PROXY (interface)
.
根据您是否使用 gdbus-codegen
生成的代理实例,您可以使用生成的代码中的宏来检查它是否是 org.bluez.Adapter1
的代理实例,例如 MY_NAMESPACE_IS_ADAPTER1 (interface)
;或者您可以使用 g_str_equal (g_dbus_proxy_get_interface_name (G_DBUS_PROXY (interface)), "org.bluez.Adapter1")
.
手动检查接口名称
请注意,g_dbus_proxy_get_name()
将 return 代理所针对的众所周知或唯一的总线名称,这与接口名称不同。 well known or unique name 标识总线上的对等点(通常是另一个进程)。该对等点在 对象路径 公开对象,并且每个对象实现一个或多个 接口 .
我正在尝试编写一些使用 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);
中的 return 进行比较来做到这一点,但我没有 GDBusProxy
,我有 GDBusInterface
。所以我的问题是:如何从 GDBusInterface
得到 GDBusProxy
?
GDBusInterface
是由 GDBusProxy
class 实现的接口,所以你已经有了 GDBusProxy
——你只需要将它转换为正确的类型,您可以使用 G_DBUS_PROXY (interface)
.
根据您是否使用 gdbus-codegen
生成的代理实例,您可以使用生成的代码中的宏来检查它是否是 org.bluez.Adapter1
的代理实例,例如 MY_NAMESPACE_IS_ADAPTER1 (interface)
;或者您可以使用 g_str_equal (g_dbus_proxy_get_interface_name (G_DBUS_PROXY (interface)), "org.bluez.Adapter1")
.
请注意,g_dbus_proxy_get_name()
将 return 代理所针对的众所周知或唯一的总线名称,这与接口名称不同。 well known or unique name 标识总线上的对等点(通常是另一个进程)。该对等点在 对象路径 公开对象,并且每个对象实现一个或多个 接口 .