PulseAudio DBUS API 页面说 LoadModule 的参数是
参数:名称:字符串,参数:{String -> String}
它还指出 {String -> String} 是一个带有 String 键和 String 值的字典。
我如何通过 c++ API 发送这个?通常我会做这样的事情:
msg = dbus_message_new_method_call(
"org.PulseAudio1", //Destination
"/org/pulseaudio/core1", //Object path to call on
interfaceStr, //Interface to call on
method); //Method
然后创建一个 msg 迭代器:
//append arguments to the LoadModule() method. (String, {String->String})
dbus_message_iter_init_append(msg, &msgIter);
dbus_message_iter_append_basic(&msgIter, DBUS_TYPE_STRING,&moduleName);
//dict entries
dbus_message_iter_open_container(&msgIter, DBUS_TYPE_DICT_ENTRY, NULL, &subIter);
dbus_message_iter_append_basic(&subIter, DBUS_TYPE_STRING, &sourceStr);
dbus_message_iter_append_basic(&subIter, DBUS_TYPE_STRING, &sourcePath);
dbus_message_iter_close_container(&msgIter, &subIter);
dbus_message_iter_open_container(&msgIter, DBUS_TYPE_DICT_ENTRY, NULL, &subIter);
dbus_message_iter_append_basic(&subIter, DBUS_TYPE_STRING, &sinkStr);
dbus_message_iter_append_basic(&subIter, DBUS_TYPE_STRING, &sinkPath);
dbus_message_iter_close_container(&msgIter, &subIter);
这会创建一个像这样的参数列表,我认为: LoadModule(String, {String->String}, {String->String})
但是,该函数没有给出答复。我认为我没有正确创建参数。事实上,我很确定我不是。我见过其他人将数组用于不同的方法,但这里没有具体说明。有没有办法明确说明某物是键/值?
更新:
我发现这一行:字典条目必须是数组的元素,并且它必须只包含两个元素的键值对,具有基本的 D-Bus 类型键。在D-Bus 的 GNU 使用页面上,以防万一。我会尝试并发布结果。