gpt4 book ai didi

c++ - 如何使用 gdbus-codegen 注释带有 org.gtk.GDBus.C.ForceGVariant 的 xml 文件

转载 作者:行者123 更新时间:2023-11-30 04:48:21 25 4
gpt4 key购买 nike

我正在尝试注释一个 xml 文件,以便 dbus-codegen 生成一个使用 GVariant * 而不是像 gchar 这样的 native 类型的方法。

这是我正在使用的 xml 代码。

<node>
<interface name="org.bluez.GattCharacteristic1">
<method name="WriteValue">

<arg name="value" type="ay" direction="in"/>

</method>
</interface>
</node>

我已阅读以下 stackoverflow 帖子:

Sending a byte array (type `ay`) over D-Bus using GDBus

阅读那篇文章后,我尝试了以下方法:

1)编辑xml文件以包含注释

<node>
<interface name="org.bluez.GattCharacteristic1">
<method name="WriteValue">
<annotation name="org.gtk.GDBus.C.ForceGVariant" value="true">
<arg name="value" type="ay" direction="in"/>
</annotation>
</method>
</interface>
</node>

然后做:

gdbus-codegen --interface-prefix org.bluez --c-generate-object-manager --generate-c-code generated-code org.bluez.xml

这没有生成我想要的。

2) 在 gdbus-codegen 上使用 --annotate 开关:

gdbus-codegen --annotate "org.bluez.GattCharacteristic1.WriteValue()" org.gtk.GDBus.C.ForceGVariant true --interface-prefix org.bluez --c-generate-object-manager --generate-c-code generated-code org.bluez.xml

这没有生成我想要的。

我成功的唯一方法是将以下代码中的“ay”更改为“a(y)”:

    <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true">
<arg name="value" type="a(y)" direction="in"/>
</annotation>'

然而,这会导致其他问题。

那么如何使用以下声明获取 WriteValue 方法:

    gboolean gatt_characteristic1_call_write_value_sync
(GattCharacteristic1 *proxy,
GVariant *arg_value,
GCancellable *cancellable,
GError **error)

代替:

    gboolean gatt_characteristic1_call_write_value_sync (
GattCharacteristic1 *proxy,
const gchar *arg_value,
GCancellable *cancellable,
GError **error)

有人可以告诉我我做错了什么吗。

谢谢。

最佳答案

作为documented in the D-Bus specification’s section on the introspection data format , 你需要使用 <annotation>作为一个自闭合元素,而不是包围 <arg>元素。

所以你想要:

<node>
<interface name="org.bluez.GattCharacteristic1">
<method name="WriteValue">
<arg name="value" type="ay" direction="in">
<annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
</arg>
</method>
</interface>
</node>

您还可以查看此 in the GLib source code 的示例.

关于c++ - 如何使用 gdbus-codegen 注释带有 org.gtk.GDBus.C.ForceGVariant 的 xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55875308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com