Russian Qt Forum

Qt => Общие вопросы => Тема начата: niag от Сентябрь 20, 2010, 15:11



Название: Проблема c QtDbus
Отправлено: niag от Сентябрь 20, 2010, 15:11
Приветствую всех!

Делаю программу на 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){
}

Естественно, ничего не работает :(
Заранее благодарен всем откликнувшимся!