나는 응답을 구문 분석하고에 "net.connman.Manager.GetServices"다음과 같습니다 기능 :"a (oa {sv})"dbus 유형을 구문 분석하는 방법은 무엇입니까?
매우 복잡한 구조입니다<method name="GetServices">
<arg name="services" type="a(oa{sv})" direction="out"/>
</method>
.
GVariant* result = ... // response containing data
GVariantIter* iter1;
g_variant_get(result, "a(oa{sv})", &iter1);
GVariant* child = g_variant_iter_next_value(iter1);
while (nullptr != child)
{
gchar* string;
GVariant* data;
g_variant_get(child, "(oa{sv})", &string, &data);
// how to access inner array?
g_variant_unref(child);
child = g_variant_iter_next_value(iter1);
}
g_variant_iter_free(iter1);
그래서, 어떻게 내부 배열의 데이터에 액세스 할 : 내가 지금까지 가지고 무엇
이 무엇입니까?
나는 이것을 시도했다 : GVariantIter * iter2; g_variant_get (data, "a {sv}", & iter2); GVariant * child2 = g_variant_iter_next_value (iter2);
는하지만 약간의 정렬 오류와 함께 실패 :
**
GLib:ERROR:../../glib-2.48.2/glib/gvarianttypeinfo.c:163:g_variant_type_info_check: assertion failed: (info->alignment == 0 || info->alignment == 1 || info->alignment == 3 || info->alignment == 7)
Aborted