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

MrU*_*ser 2 c++ dbus variant

对于 DBUS 方法,例如

org.freedesktop.DBUS.Properties.Set(string,string,A Value)

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

关于如何做到这一点,网络上没有很多明确的例子。如何在不使用 dbus-c++ 库的情况下在 C++ 中创建这个变体?

MrU*_*ser 5

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

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

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);
Run Code Online (Sandbox Code Playgroud)

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

希望它可以帮助某人。