c++ - 如何将变体参数传递给 C++ 中的 DBUS 方法调用?

标签 c++ dbus variant

对于 DBUS 方法,例如

org.freedesktop.DBUS.Properties.Set(字符串,字符串,A值)

将“任何有效的 DBus 类型”作为其第三个参数,该参数的 DBUS 类型(即 BOOLEAN)必须包装在一个变体中。

网络上没有很多关于如何执行此操作的明确示例。如何在不使用 dbus-c++ 库的情况下用 C++ 创建这一变体?

最佳答案

我花了一段时间才弄清楚这一点。

您可以使用以下函数来做到这一点:

DBusMessageIter iter,subIter;

//append arguments to the Set() method. (string interface, string property, value)
dbus_message_iter_init_append(msg, &iter);

dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING,&interfaceString);
dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING,&propertyString);

//HOW TO CALL VARIANT?:
dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT, DBUS_TYPE_BOOLEAN_AS_STRING, &subIter);
dbus_message_iter_append_basic(&subIter, DBUS_TYPE_BOOLEAN, &valBOOL);
dbus_message_iter_close_container(&iter, &subIter);

在此示例中,第三个参数是字符串形式的 DBUS_TYPE_BOOLEAN。 &valBool 的类型为 dbus_bool_t

希望它对某人有帮助。

关于c++ - 如何将变体参数传递给 C++ 中的 DBUS 方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22992461/

相关文章:

c++ - C/C++ 中 MySQL 的静态链接

c++ - 什么是对象切片?

c++ - VS2010、DirectX 和 Intellisense 问题

c++ - 在基类/派生类的成员函数/友元函数中Derive* to Base*转换

dbus - 您可以在不调用org.freedesktop.DBus.Properties.Get的情况下检索D-Bus属性吗?

bash - 启动后将 pid 映射到 qdbus 服务编号

graphql - Shopify 店面 API : Getting referenced variant with GraphQL

service - DBus如何启动服务

c++ - 获取变体的值,它本身可能是另一个变体

c++ - 在 g++ 中使用 std::variant