【发布时间】:2016-12-21 17:36:12
【问题描述】:
我使用dbus-cxx 通过 dbus 进行方法调用。现在有些方法返回多个参数,我不知道如何接收除第一个参数之外的任何参数。
我初始化代理方法:
DBus::MethodProxy<int>& info_proxy = *(object->create_method<int>(ServerName, "Info"));
当我获取返回值时,在这种情况下它只是三个可能输出中的第一个值。
描述方法的 XML 如下所示:
<method name="Info">
<arg type="i" direction="out" name="rate"/>
<arg type="i" direction="out" name="freq"/>
<arg type="i" direction="out" name="nch"/>
</method>
从 QDBusViewer 中调用该方法会提供输出 Arguments: 1813099, 44100, 2,因此它提供了三个输出,但我不知道如何访问这些输出。
编辑:我得到了它的工作,通过使用工具 dbus-cxx-xml2cpp 我得到了一个使用DBus::CallMessage 而不是DBus::MethodProxy 的方法定义。结果回复包含该方法返回的所有参数。
【问题讨论】:
-
为什么不用代码生成器(
dbus-cxx-xml2cpp工具)从 XML 生成类?但是,如果您手动操作,我希望看到类似的内容:DBus::MethodProxy<void, int&, int&, int&>。 -
我在构建该工具时遇到了一些困难,因此我决定手工完成。我有你之前建议的功能,但是当我运行程序时,我得到
terminate called after throwing an instance of 'std::shared_ptr<DBus::Error>',但我找不到问题。 -
如果很难构建,那么使用操作系统附带的 dbus 包装器是有意义的:它可能是
dbus-c++(或找到一个打包的dbus-cxx)。什么是构建错误?DBus::Error异常中的错误是什么? -
当我从 AUR 安装它时,我还得到了代码生成器。生成的方法非常有用,因为正确的方法是 CallMessage 而不是简单的方法调用。这个调用的答案是一个包含 3 个参数的流。
-
您可以将其发布为答案并接受它。