gpt4 book ai didi

c++ - 无法使用迭代器迭代具有数组类型的 GVariant

转载 作者:搜寻专家 更新时间:2023-10-31 02:17:55 25 4
gpt4 key购买 nike

我正在尝试使用 GDBus 通过 DBus 调用远程方法。我的问题是方法调用成功,但方法的返回值(作为 GVariant 可用)包含一个数组作为其元素。当我尝试使用 GVariantIter 遍历它时,它会导致段错误。但是,如果我使用 g_variant_print() 将它打印到标准输出,它就会成功打印数据。我究竟做错了什么 ?指定的格式字符串是正确的,我已经使用 g_variant_get_type_string() 进行了检查。我的代码片段如下。

        GVariantIter* iter;
gint16 res, mts, vlm;
guint16 sid;
char * sname ;
GVariant* avail ;
guint16 clsid;
GVariant* retvalue = g_dbus_proxy_call_sync (proxy,
"Method",
"", //no parameters
G_DBUS_CALL_FLAGS_NONE,
-1,
NULL,
&error
);

g_variant_get(retvalue, "(na(qs(nn)nnq))",&res, &iter);
while ( g_variant_iter_loop (iter, "(qs(nn)nnq)", &sid, &sname, &avail, &mts, &vlm, &clsid) )
{
// Operate on the variables
}

最佳答案

如果我没记错的话,g_dbus_proxy_call_sync() 会在一个元组中返回你的 GVariant。您需要做的是在创建迭代器之前打开元组。

尝试在调用 g_dbus_proxy_call_sync 之后执行此操作:

GVariantIter *iter;
GVariant *temp;

temp = g_variant_get_child_value (retvalue, 0);

iter = g_variant_iter_new (temp);

while (g_variant_iter_loop (iter, "(qs(nn)nnq)", &sid,
&sname, &avail, &mts, &vlm, &clsid))
{
//operate
}

关于c++ - 无法使用迭代器迭代具有数组类型的 GVariant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35131717/

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