libdbus 读取数组类型结果
Posted
技术标签:
【中文标题】libdbus 读取数组类型结果【英文标题】:libdbus reading array type result 【发布时间】:2015-03-23 11:52:42 【问题描述】:我必须阅读 org.freedesktop.NetworkManager.GetDevices
我的程序调用该方法并正确接收结果。
问题是如何支持字符串/路径类型的数组? 如何获取数组的长度以及如何获取单个元素, 谢谢。
【问题讨论】:
到目前为止你有什么? 【参考方案1】:对于非固定大小元素(如字符串)的数组,我们必须调用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));
【讨论】:
【参考方案2】:很高兴您设法修复了您的代码,但请注意,建议您不要使用 libdbus-1 连接到 D-Bus:它的设计已经过时,并且是正确使用很痛苦。但是,与 libdbus-glib 不同,它仍然得到维护。
使用更现代的高级 API 更容易,例如 GDBus。
(libdbus-glib 和 libdbus-1 故意不链接以避免给他们 google 汁。)
【讨论】:
以上是关于libdbus 读取数组类型结果的主要内容,如果未能解决你的问题,请参考以下文章
LibreOffice:加载共享库时出错:libdbus-glib-1.so.2