应用程序需要运行dbus_g_proxy_new_for_name才能工作?

Cum*_*tru 3 unix dbus glib

我可以在没有实现D-Bus方法的应用程序启动并运行的情况下调用dbus_g_proxy_new_for_name吗?我不确定这样做是否是好的做法,或者是否通常.

nem*_*equ 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ëlSlinckx'DBusActivation Tutorial的"客户端实现"部分.它包括这个片段(注意评论):

/* 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;
}
Run Code Online (Sandbox Code Playgroud)

在调用方法之前,甚至不会触发D-Bus激活,因此显然该名称在此之前不一定存在.