Я использую привязку dbus-c ++ для создания прокси для API-интерфейса службы connman, который доступен на dbus.
Метод, найденный в интерфейсе сервиса connman xml, выглядит так:
<method name="GetProperties">
<arg type="a{sv}" direction="out"/>
</method>
Файл прокси, который был автоматически сгенерирован с помощью утилиты "dbusxx-xml2cpp",
создал рассматриваемый метод примерно так:
Line 1: std::map< std::string, ::DBus::Variant > GetProperties()
Line 2: {
Line 3: ::DBus::CallMessage call;
Line 4: call.member("GetProperties");
Line 5: ::DBus::Message ret = invoke_method (call);
Line 6: ::DBus::MessageIter ri = ret.reader();
Line 7: std::map< std::string, ::DBus::Variant > argout;
Line 8: ri >> argout;
Line 9: return argout;
Line 10: }
Это в строке 8, что я получаю предупреждение / ошибку,
на x86 под управлением Ubuntu 11.04 с пакетом libdbus-c ++ - 1-0 (0 ~ 20110310-1ubuntu1):
process 30342: arguments to dbus_message_iter_open_container() were incorrect, assertion "(type == DBUS_TYPE_STRUCT && contained_signature == NULL) || (type == DBUS_TYPE_DICT_ENTRY && contained_signature == NULL) || (type == DBUS_TYPE_VARIANT && contained_signature != NULL) || (type == DBUS_TYPE_ARRAY && contained_signature != NULL)" failed in file dbus-message.c line 2677.
This is normally a bug in some application using the D-Bus library.
process 30342: dbus message iterator looks uninitialized or corrupted
.... и многое другое ..... Но процесс НЕ завершается / прервать здесь.
Однако, на бегу по цели, основанной на руке,
процесс ПРЕКРАЩАЕТ после этой ошибки подтверждения!
Пакет, используемый в meego на игровой доске:
libdbus-C ++ - 0.5.1-4.3.armv7hl.rpm
libdbus-c ++ - devel-0.5.1-4.3.armv7hl.rpm
Пожалуйста, помогите в решении этой проблемы.
Есть ли другой способ, которым итератор может вставить значение DICT - (std :: map ), не выбрасывая эти ошибки утверждения?
Буду признателен за любую помощь.
-Рой Самуэль.