私はこの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を取得します。 TESTING 印刷
印刷 セグメンテーションフォールト
私はこの呼び出しから期待していた結果は次のとおりです。私はコールからそれにバリアントデータ構造とデータを取得するにはどうすればよい
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()コールをどのように形成するのですか?
おかげ
ありがとうございます! GLib-CRITICAL **: 'ub 'は有効なGVariant形式の文字列ではありません。 (プロセス:4434):GLib-CRITICAL **:g_variant_get:アサーション' valid_format_string(format_string、 TRUE、value) 'が失敗しました セグメンテーションエラー – Arn
@Aliええと、g_variant_get_type_string(inner)を印刷できますか? – pmod
@Ali括弧が足りないので、今はうまくいくはずです – pmod