(Спецификации метода 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.
без обратной трассировки. Так что, очевидно, некоторые аргументы были добавлены неправильно.
Мне просто нужно решение для этой конкретной библиотеки, мне не нравятся альтернативы.
Заранее спасибо.