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 果汁。)
我必须阅读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 果汁。)