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

时间:2014-04-10 15:31:19

标签: c++ dbus variant

对于DBUS方法,例如

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

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

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

1 个答案:

答案 0 :(得分:3)

我花了一段时间才弄明白这一点。

您可以使用以下功能执行此操作:

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

希望它有所帮助。