使用 libdbus-c++ 获得 DBus::Path - 下一步是啥?

Posted

技术标签:

【中文标题】使用 libdbus-c++ 获得 DBus::Path - 下一步是啥?【英文标题】:Got a DBus::Path with libdbus-c++ - what next?使用 libdbus-c++ 获得 DBus::Path - 下一步是什么? 【发布时间】:2013-05-04 03:24:21 【问题描述】:

我有一个简短的测试程序,用于研究如何将 D-Bus 与 libdbus-c++ 库一起使用。我正在尝试连接到wpa_supplicant D-Bus API(记录在here),以便阅读WiFi AP 列表及其优势。

在this guide 之后,我使用dbusxx-xml2cpp wpa_supplicant_dbus_service.xml --proxy=proxy.h 生成了一个代理标头,并实现了一个带有信号存根处理程序的WPAS 类:

class WPAS : public fi::w1::wpa_supplicant1_proxy,
                    public DBus::IntrospectableProxy,
                    public DBus::ObjectProxy

public:
     WPAS(DBus::Connection &connection, const char *path, const char *name):
     DBus::ObjectProxy(connection, path, name)
     
     

    void InterfaceAdded(const ::DBus::Path& path, const std::map< std::string, ::DBus::Variant >& properties) 
    void InterfaceRemoved(const ::DBus::Path& path) 
    void PropertiesChanged(const std::map< std::string, ::DBus::Variant >& properties) 
;

其余代码如下所示:

#include <dbus-c++/dbus.h>
#include "proxy.h"

DBus::BusDispatcher dispatcher;

int main(int argc, char** argv)

    DBus::default_dispatcher = &dispatcher;
    DBus::Connection bus = DBus::Connection::SystemBus();

    DBus::Path path;

    WPAS wpad(bus, "/fi/w1/wpa_supplicant1", "fi.w1.wpa_supplicant1");

    path = wpad.GetInterface("wlan2");

    return 0;

但是,我不知道下一步该做什么。目的是调用fi.w1.wpa_supplicant1.InterfaceScan()方法。

【问题讨论】:

【参考方案1】:

它遵循与您调用fi::w1::wpa_supplicant1.GetInterface 类似的模式;即,我将创建另一个继承自 fi::w1::wpa_supplicant1::Interface_proxyDBus::IntrospectableProxyDBus::ObjectProxy 的类(例如 WPASI)。

假设两个对象(wpad 和界面)在同一个服务上,您将创建这个新类的实例,如下所示:

WPASI wpasi( bus, path, "fi.w1.wpa_supplicant1" );

然后像往常一样拨打wpasi.Scan()

【讨论】:

以上是关于使用 libdbus-c++ 获得 DBus::Path - 下一步是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CSS 获得特定数字的孩子?

使用 mongodb 获得条件总和

如果我使用setter getter 在一种方法中设置值并且我可以使用getter 获得相同的值来获得它是可能的吗? [关闭]

使用sklearn获得精度和召回

如何使用 XML 获得负半径 Android Round Corner

使用网格搜索获得最佳模型的“并行”管道