【问题标题】:Receive multiple arguments after method call in dbus-cxxdbus-cxx中方法调用后接收多个参数
【发布时间】: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&lt;void, int&amp;, int&amp;, int&amp;&gt;
  • 我在构建该工具时遇到了一些困难,因此我决定手工完成。我有你之前建议的功能,但是当我运行程序时,我得到terminate called after throwing an instance of 'std::shared_ptr&lt;DBus::Error&gt;',但我找不到问题。
  • 如果很难构建,那么使用操作系统附带的 dbus 包装器是有意义的:它可能是dbus-c++(或找到一个打包的dbus-cxx)。什么是构建错误? DBu‌​s::Error 异常中的错误是什么?
  • 当我从 AUR 安装它时,我还得到了代码生成器。生成的方法非常有用,因为正确的方法是 CallMessage 而不是简单的方法调用。这个调用的答案是一个包含 3 个参数的流。
  • 您可以将其发布为答案并接受它。

标签: c++ dbus


【解决方案1】:

我得到了它,通过使用工具dbus-cxx-xml2cpp,我得到了一个使用DBus::CallMessage 而不是DBus::MethodProxy 的方法定义。结果回复包含该方法返回的所有参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 2013-01-25
    • 1970-01-01
    • 2012-03-09
    • 2014-05-24
    相关资源
    最近更新 更多