2016-08-15 71 views
1

我使用dbus-cxx通过dbus进行方法调用。现在有方法返回多个参数,我不知道如何接收第一个参数旁边的任何参数。在dbus-cxx中调用方法后收到多个参数

我初始化代理方法:

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方法定义。得到的答复包含方法返回的所有参数。

+0

为什么不用代码生成器('dbus-cxx-xml2cpp'工具)从XML生成类?但是如果你亲自操作,我希望看到类似这样的东西:'DBus :: MethodProxy '。 – Velkan

+0

我在构建工具时遇到了一些困难,因此我决定手工完成。 我有像你之前建议的功能,但是当我运行该程序时,我得到'抛出'std :: shared_ptr '的实例后调用terminate,我无法找到问题。 – Dorni

+0

如果很难构建,那么使用OS自带的dbus wrapper是很有意义的:它可能是'dbus-C++'(或者找到一个打包的'dbus-cxx')。什么是构建错误? DBu s :: Error'异常中的错误是什么? – Velkan

回答

0

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

相关问题