我必须阅读org.freedesktop.NetworkManager.GetDevices
我的程序调用方法并正确接收结果。
问题是如何支持字符串/路径类型的数组? 如何获取数组的长度以及如何获取单个元素, 感谢。
答案 0 :(得分:0)
对于非固定大小元素(如字符串)的数组,我们必须调用dbus_message_iter_recurse(& args,& string);,将指向main迭代器的指针作为args,将指针作为新迭代器作为第二个参数。
要获取元素,我们调用dus_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));

答案 1 :(得分:0)
我很高兴您设法修复了您的代码,但请注意,建议您不要使用libdbus-1 连接到D-Bus:它的设计已经过时了,正确使用的痛苦。但是,与libdbus-glib不同,它仍然保持不变。
使用更现代的高级API更容易,例如GDBus。
(libdbus-glib和libdbus-1故意不联系,以免给他们谷歌汁。)