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

Posted

技术标签:

【中文标题】如何将变量参数传递给 C++ 中的 DBUS 方法调用?【英文标题】:How can one pass a variant argument to DBUS method call in C++? 【发布时间】:2014-05-24 10:05:59 【问题描述】:

对于DBUS方法如

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

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

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

【问题讨论】:

很好的信息,但不完全是一个问题。也许提出一个问题“你如何将一个值包装在一个变体中?”并用代码回答。 Share your knowledge Q&A style 谢谢。我想知道只是发布是否是不好的形式,但我想分享信息。现在我知道未来的顿悟。 【参考方案1】:

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

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

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++ 中的 DBUS 方法调用?的主要内容,如果未能解决你的问题,请参考以下文章

C++:如何将变量作为参数传递给类构造函数

将实例变量作为参数传递给同一类中的方法?

如何将右值引用参数传递给 C++ 中的模板 operator() 函数?

如何将参数传递给 React js 中的函数?

如何将变量/参数传递给android视图方法

如何将 JavaScript 变量作为参数传递给 JSF 操作方法?