我可以在没有实现 D-Bus 方法的应用程序启动并运行的情况下调用 dbus_g_proxy_new_for_name 吗?我不确定这样做是否是好的做法,或者是否是通常的做法。
问问题
520 次
1 回答
5
在我回答之前,我想指出DBus-GLib 已弃用。但是,答案也适用于g_dbus_proxy_new(它基本上是dbus_g_proxy_new_for_name的替代品)。
是的。dbus_g_proxy_new_for_name讨论了所有者如何随时间变化,尽管它没有明确提到调用时没有所有者的情况(最初强调):
名称所有者可能会随着时间而改变,例如在两个不同的方法调用之间,除非名称是唯一的名称。如果需要固定所有者,则需要请求当前所有者并将代理绑定到其唯一名称而不是通用名称;参见 dbus_g_proxy_new_for_name_owner()。
将其与 D-Bus 激活一起使用实际上很常见。查看Raphaël Slinckx 的 DBus 激活教程的“客户端实现”部分。它包括这个片段(注意评论):
/* This won't trigger activation! */
proxy = dbus_g_proxy_new_for_name (connection,
"org.gnome.ServiceName",
"/org/gnome/ServiceName",
"org.gnome.ServiceName");
/* The method call will trigger activation, more on that later */
if (!org_gnome_ServiceName_echo_string (proxy, "The string we want echo-ed", &result, &error))
{
/* Method failed, the GError is set, let's warn everyone */
g_warning ("Woops remote method failed: %s", error->message);
g_error_free (error);
return;
}
D-Bus 激活甚至在调用方法之后才被触发,因此显然该名称在此之前不一定存在。
于 2013-02-09T01:10:07.057 回答