Как правильно вызвать функцию Dbus «org.freedesktop.Notifications.Notify» через библиотеку dbus-c ++ в Linux? - PullRequest
0 голосов
/ 10 ноября 2019

(Спецификации метода dbus находятся здесь .)

Я использую библиотеку dbus-c ++, практически нет реальной документации для него, кроме сгенерированных документов без примеров.

После некоторого интенсивного поиска в Google, я мог бы собрать следующий код:

#include <iostream>
#include <vector>
#include <string> 
#include <dbus-c++-1/dbus-c++/dbus.h>

int main (int argc, const char **argv)
{
        DBus::BusDispatcher DbDispatcher;
        DBus::default_dispatcher = &DbDispatcher;
        DBus::Connection DbConnection = DBus::Connection::SessionBus();

        std::vector<std::string> actions = {"ACT_ONE", "Click me"};

        std::string appName = "TestApp";
        std::string body = "TestBody";
        std::string appIcon = "document-open";
        std::string summary = "Summary";

        DBus::CallMessage msg("", "", "org.freedesktop.Notifications", "Notify");
        DBus::MessageIter msgIter = msg.writer();

        msgIter.append_string(appName.c_str());
        msgIter.append_uint32(0);
        msgIter.append_string(appIcon.c_str());
        msgIter.append_string(summary.c_str());
        msgIter.append_string(body.c_str());

        DBus::MessageIter arrayIter = msgIter.new_array(DBUS_TYPE_STRING_AS_STRING);
        for(auto& iAction: actions)
        {
            arrayIter.append_string(iAction.c_str());
        }
        msgIter.close_container(arrayIter);

        DBus::MessageIter dictIter = msgIter.new_dict_entry();
        msgIter.close_container(dictIter);

        msgIter.append_int32(-1);

        DbConnection.send_blocking(msg);
};

, но приведенное выше дает мне:

dbus [12421]: аргументы для dbus_message_new_method_call () были неверными, утверждение "destination == NULL || _dbus_check_is_valid_bus_name (destination)" не удалось в файле ../../../dbus/dbus-message.cстрока 1365. Обычно это ошибка в некоторых приложениях, использующих библиотеку D-Bus.

без обратной трассировки. Так что, очевидно, некоторые аргументы были добавлены неправильно.

Мне просто нужно решение для этой конкретной библиотеки, мне не нравятся альтернативы.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...