【发布时间】:2015-07-10 11:53:06
【问题描述】:
我有一个向 DBus 公开方法的过程,其中一个参数采用以下类型签名a{sv}:
{String, Variant} 的字典
The libDBus documentation for dbus_message_append_args 未能为此提供足够的参考。 specification under container-types中出现了一些信息,具体来说:
DICT_ENTRY 的工作方式与结构完全相同,但不是括号 它使用花括号,并且有更多限制。限制条件 是:它仅作为数组元素类型出现;它正好有两个 花括号内的单个完整类型;第一首单曲 完整类型(“键”)必须是基本类型而不是容器 类型。实现不得接受数组之外的 dict 条目, 不得接受具有零个、一个或两个以上字段的 dict 条目, 并且不能接受带有非基本类型键的 dict 条目。一个字典 entry 始终是一个键值对。
在尝试附加字典时,我收到以下错误消息:
type dict_entry isn't supported yet in dbus_message_append_args_valist
虽然我实际上使用的是dbus_message_append_args(我猜错误消息有些不对劲)。
dbus_message_append_args() 有另外两种替代方法:
dbus_message_iter_append_basic()
和
dbus_message_iter_append_fixed_array()
虽然我可以使用以下内容创建一个空的 Dict 容器:
const char * container_d_sig = "{sv}";
DBusMessageIter iter, sub;
dbus_message_iter_init_append(msg, &iter);
dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, container_d_sig, &sub);
dbus_message_iter_close_container(&iter, &sub);
这两种追加方法似乎都不支持添加结构。不知道在这里尝试什么...
【问题讨论】: