D-Busメソッドを実装するアプリケーションを起動せずにdbus_g_proxy_new_for_nameを呼び出すことはできますか?そうすることが良い習慣なのか、それとも通常のことなのかはわかりません。
1 に答える
答える前に、 DBus-GLibは非推奨になっていることを指摘したいと思います。ただし、答えはg_dbus_proxy_new(基本的にはdbus_g_proxy_new_for_nameの代わりになります)にも当てはまります。
はい。dbus_g_proxy_new_for_nameは、所有者が時間の経過とともにどのように変化するかについて説明していますが、呼び出し時に所有者がいない場合(元の強調)については明示的に言及されていません。
名前の所有者は、名前が一意の名前でない限り、たとえば2つの異なるメソッド呼び出し間で時間の経過とともに変更される可能性があります。固定所有者が必要な場合は、現在の所有者を要求し、プロキシを総称名ではなく一意の名前にバインドする必要があります。dbus_g_proxy_new_for_name_owner()を参照してください。
これをD-Busアクティベーションで使用することは実際には非常に一般的です。RaphaëlSlinckxのDBusActivationTutorialの「ClientImplementation」セクションを確認してください。このスニペットが含まれています(コメントに注意してください):
/* 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のアクティブ化は、メソッドが呼び出されるまでトリガーされないため、その前に名前が存在する必要はありません。