Приветствую всех!
Делаю программу на C++ , в которой (первый раз) использую qt'шный dbus для вызова серверного приложения из клиентского и передачи некоторого текста. Проблема в следующем: qdbusviewer выдает такое сообщение
Error: Call to object / at :<Номер соединения>: org.freedesktop.DBus.Error.UnknownObject (No such object path '/') failed
однако "object path" объявлен и равен другому значению. привожу код функций, отвечающих за dbus:
Клиент:
#define SERVICE_NAME "my.app.dbus"
#define INTERFACE_NAME "my.app.dbus"
#define PATH_NAME "/my/app/dbus"
#define METHOD_NAME "myMethod"
void sendData(char *argValue) {
QDBusInterface interface(QString(SERVICE_NAME), QString(PATH_NAME), QString(INTERFACE_NAME)));
// Checking for valid
if (!interface.isValid()) {
qWarning() << __FILE__ << __LINE__ << __FUNCTION__ << ": interface is not correct";
qWarning() << __FILE__ << __LINE__ << __FUNCTION__ << ":"
<< interface.lastError().message().toAscii().constData();
}
QString Code = QString(argValue);
// Call method from interface file
QDBusReply<QString> reply = interface.call(QString(METHOD_NAME), Code);
// Checking for valid
if (reply.isValid()) {
qWarning() << "Answer:" << reply.value();
}
else {
qWarning() << __FILE__ << __LINE__ << __FUNCTION__ << ":"
<< reply.error().message().toAscii().constData();
}
}
Сервер:
#define SERVICE_NAME "my.app.dbus"
#define CONNECTION_NAME "my.app.dbus"
#define INTERFACE_NAME "my.app.dbus"
#define PATH_NAME "/my/app/dbus"
#define METHOD_NAME "myMethod"
QDBusConnection dBusInit() {
bool serv;
bool obj;
// Creating connection
QDBusConnection connection =
QDBusConnection::connectToBus(QDBusConnection::SessionBus, QString(CONNECTION_NAME));
// Checking for connection's existance
if (false == connection.isConnected()) {
qWarning() << __FILE__ << __LINE__ << __FUNCTION__ << "Connection doesn't exist";
exit(1);
}
// Registering service
if (false == (serv = connection.registerService(QString(SERVICE_NAME)))) {
qWarning() << "Warning: service wasn't registered. Abort.";
connection.disconnectFromBus(QString(CONNECTION_NAME));
exit(2);
}
// Registering object, which realise service
if (false == (obj = connection.registerObject(QString(PATH_NAME), this, QDBusConnection::ExportAllContents))) {
qWarning() << "Warning: d-bus object wasn't registered. Abort";
connection.disconnectFromBus(QString(CONNECTION_NAME));
connection.unregisterService(QString(SERVICE_NAME)));
exit(3);
}
return connection;
}
void interfaceAction() {
QDBusConnection con = dBusInit();
// Creating interface
QDBusInterface interface(QString(SERVICE_NAME), QString(PATH_NAME),
QString(INTERFACE_NAME), con, this);
bool endOfSession = false;
// Starting
while (!endOfSession) {
// Call method from interface file
QDBusReply<QString> reply = interface.call(QString(METHOD_NAME));
// Checking for valid
if (reply.isValid()) {
someFunction(reply.value());
endOfSession = true;
}
}
}
void someFunction(QString str){
}
Естественно, ничего не работает :(
Заранее благодарен всем откликнувшимся!