1
我想通過使用GDBus的DBus調用遠程方法。我的問題是方法調用成功,但方法的返回值(作爲GVariant可用)包含一個數組作爲其元素。當我嘗試使用GVariantIter遍歷它時,它會導致分段錯誤。但是,如果我使用g_variant_print()將它打印到標準輸出,它將成功打印數據。我究竟做錯了什麼 ?指定的格式字符串是正確的,我使用g_variant_get_type_string()檢查了它。我的代碼片段如下。如果我沒有記錯的話無法使用迭代器迭代具有數組類型的GVariant
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
}