【发布时间】:2015-03-23 11:52:42
【问题描述】:
我必须阅读 org.freedesktop.NetworkManager.GetDevices
我的程序调用该方法并正确接收结果。
问题是如何支持字符串/路径类型的数组? 如何获取数组的长度以及如何获取单个元素, 谢谢。
【问题讨论】:
-
到目前为止你有什么?
我必须阅读 org.freedesktop.NetworkManager.GetDevices
我的程序调用该方法并正确接收结果。
问题是如何支持字符串/路径类型的数组? 如何获取数组的长度以及如何获取单个元素, 谢谢。
【问题讨论】:
对于非固定大小元素(如字符串)的数组,我们必须调用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 汁。)
【讨论】: