我正在學習如何玩這個g_varient_new(),這真的讓我很困惑。我讀過https://developer.gnome.org/glib/unstable/glib-GVariant.html#g-variant-new,但我無法輕易理解。從g_varient_new()得到結果...
我有一個代碼:
#define MM_DBUS_SERVICE "org.freedesktop.ModemManager1"
#define MM_DBUS_PATH "/org/freedesktop/ModemManager1/Modem/0"
#define MM_DBUS_GET_PROPERTIES "org.freedesktop.DBus.Properties"
....
int i;
GError *error = NULL;
GVariant *ret;
char **paths;
ret = g_dbus_proxy_call_sync (proxy,
"org.freedesktop.DBus.Properties.Get",
g_variant_new ("(ss)",
"org.freedesktop.ModemManager1.Modem",
"SignalQuality"),
G_DBUS_CALL_FLAGS_NONE, -1,
NULL, &error);
if (!ret) {
g_dbus_error_strip_remote_error (error);
g_print ("failed: %s\n", error->message);
g_error_free (error);
return;
}
g_variant_get (ret, "(v)", &paths);
g_variant_unref (ret);
for (i = 0; paths[i]; i++) {
g_print ("Printing \n");
g_print ("%s\n", paths[i]);
}
g_strfreev (paths);
它編譯罰款,但在運行時我得到seg_fault。 測試 印刷
印刷 分段故障
我從這個調用期望的結果是:
dbus-send --system --print-reply --dest=org.freedesktop.ModemManager1 "/org/freedesktop/ModemManager1/Modem/0" org.freedesktop.DBus.Properties.Get string:org.freedesktop.ModemManager1.Modem string:"SignalQuality"
method return sender=:1.1 -> dest=:1.121 reply_serial=2
variant struct {
uint32 38
boolean true
}
如何獲得的變量數據結構和數據出來通話?我應該如何形成g_variat_new()調用來完成這個任務?
感謝
謝謝!我仍然得到: (process:4434):GLib-CRITICAL **:'ub'不是有效的GVariant格式字符串 (進程:4434):GLib-CRITICAL **:g_variant_get:assertion'valid_format_string(format_string, TRUE,值)'失敗 分割錯誤 – Arn
@Ali嗯,你可以打印然後g_variant_get_type_string(內部)? – pmod
@Ali我加了丟失的括號,所以現在應該可以工作 – pmod