libdbus 读取数组类型结果

libdbus reading array type result

我必须阅读org.freedesktop.NetworkManager.GetDevices

我的程序调用该方法并正确接收结果。

问题是如何支持string/paths类型的数组? 如何获取数组的长度以及如何获取单个元素, 谢谢。

对于非固定大小元素的数组(例如字符串),我们必须调用dbus_message_iter_recurse(&args, &string);,将指向主迭代器的指针作为参数,将指向新迭代器的指针作为第二个参数。

获取元素,我们调用dbus_message_iter_get_basic(&string, &paths);,其中paths是指向字符数组的指针。

整个代码如下所示:

if (!dbus_message_iter_init(msg, &args))
  fprintf(stderr, "Message has no arguments!\n");

  do {
    dbus_message_iter_recurse(&args, &string);
    do {

      dbus_message_iter_get_basic(&string, &paths);
      puts(paths);
    }
    while (dbus_message_iter_next(&string));
  } while (dbus_message_iter_next(&args));
    

很高兴您成功修复了代码,但请注意,建议您不要使用 libdbus-1 连接到 D-Bus:它的设计已经过时,并且很难正确使用。然而,与 libdbus-glib 不同,它仍然得到维护。

使用更现代的高级API更容易,例如GDBus

(libdbus-glib 和 libdbus-1 故意不链接以避免给它们 google 果汁。)