如何从另一个进程/程序向DBus服务添加对象

时间:2015-02-12 00:41:49

标签: c++ qt dbus qdbus

我创建了一个DBus服务并向其添加对象。

QDBusConnection connection = QDBusConnection::sessionBus();
connection.registerService(serviceName); // name, e.g. "foo"
QDBusConnection::sessionBus().registerObject(path, object, myoptions);

很好,我可以在DBus监视器的“服务”下看到我的对象。现在我想添加更多对象,但是来自另一个程序(相关但独立)。

connection.registerService(serviceName);失败,因为服务已经存在。 如何在同一服务名称下注册更多对象?

背景:我有客户使用这些服务。他们知道谁提供服务,但只知道服务名称。所以他们总是引用相同的服务名称。但是有几家提供商应提供服务。

我试过不使用服务名称(空字符串,只依赖于对象路径)。但代理基于

QDBusAbstractInterface(serviceName, path, interfaceName.toUtf8().constData(), connection, parent)

似乎无法使用空(“”)serviceName(正确?)。

1 个答案:

答案 0 :(得分:1)

你不能,一个连接到dbus ==一个名字。连接通常是unix套接字或抽象套接字(在linux上)。您需要使用某种类型或RPC(或dbus调用)将来自第一次连接的呼叫代理到其他服务,并回复第一次连接的结果。