1

私は次の設定をしています:

  • 同じ論理グループに属する 2 つのアプリケーションがあります (論理グループ = 当社の製品)
  • これらの 2 つのアプリケーションは、DBus に同じインターフェイスに接続し (さらに多くの製品があり、すべて独自の DBus インターフェイスを使用する必要があります)、いくつかの機能を公開する必要があります (すべて QtDBus を使用します)。

だから私はしようとしました(矢印はC++ポインター操作ではありません:)):

App1 -> get QDBusConnection::sessionBus();
App1 -> registerService("com.una-frog.ddm") 
App1 -> registerObject ("/DDM-gui")

それから

App2 -> get QDBusConnection::sessionBus();
App2 -> registerService("com.una-frog.ddm") 
App2 -> registerObject ("/DDM-cli")

App1 と App2 を起動します。

この時点で、App2 は、App1 が既にサービスを登録しているため、サービスを登録できないと文句を言います。そのとおりです。

App1 を "com.una-frog.ddm. gui " に、App2 を "com.una-frog.ddm. cli " に簡単に登録できますが、1 つの共通インターフェイスと 2 つのオブジェクトを用意して、必要なものをすべて取得するようにします。行動。

同じインターフェイスに接続する 2 つの QtDBus アプリケーションを実現する方法を知っている人はいますか?

4

1 に答える 1

1

2 つのアプリは DBusインターフェイス com.una-frog.ddmを共有できます。しかし、 registerService はインターフェイスでは機能せず、DBusサービスで機能します。サービス名は、メソッド呼び出し (ユニキャスト) のルーティングに使用されるため、アプリケーション間で共有できません。

2 つのアプリが代わりに (ブロードキャスト) シグナルをリッスンするように API を再設計する場合、サービス名を登録する必要さえありません。

あるいは、バスにはサービス名のキューに入れられた所有者の概念があります (仕様DBUS_NAME_FLAG_*を参照)。これは、2 つのアプリが同じサービスを提供し、どちらがそれを処理してもかまわない場合に便利です。Qtにはこれがあるようです:http://doc.qt.digia.com/stable/qdbusconnectioninterface.html#registerService

于 2012-10-05T14:30:05.507 に答える