GLib — получение количества строк в массиве, возвращаемом через D-Bus

Я получаю массив строк через вызов функции через D-Bus следующим образом. Затем я использую GLib для анализа возвращаемых значений. Приведенный ниже код значительно упрощен. Я могу прочитать каждую строку, возвращенную с помощьюg_variant_iter_loopиiterator.

Как я могу сначала определить, сколько строк было возвращено в массиве?

Мне нужно сначала динамически выделить память в зависимости от того, сколько строк было возвращено, прежде чем читать фактические строки. Это может показаться простым, но я безуспешно искал в Интернете лучший способ сделать это. Заранее спасибо.

      GVariant * val_returned = g_dbus_connection_call_sync(connection,
                          SERVICE,
                          OBJECT,
                          IFACE,
                          "GetStringsArray",
                          NULL,
                          G_VARIANT_TYPE("(as)"),
                          G_DBUS_CALL_FLAGS_NONE,
                         -1,
                          NULL,
                          &err);

g_autoptr(GVariantIter) iterator = NULL;
g_variant_get(val_returned, "(as)", &iterator);

// Need to determine how many strings have been read into the array
// Use g_variant_iter_loop to retrieve each string as a gchar*

1 ответ

Вызовg_variant_iter_n_children (iterator).

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