Как мне правильно вызвать функцию Dbus "org.freedesktop.Notifications.Notify" через библиотеку dbus-C++ в Linux?

(Спецификации метод 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.

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

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

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

0 ответов

Другие вопросы по тегам