【问题标题】:How to call a method with multiple parameters in BlueZ?如何在 BlueZ 中调用具有多个参数的方法?
【发布时间】:2022-10-16 08:55:17
【问题描述】:
            GVariantBuilder *b;
            GVariant *obex_dict;
            b = g_variant_builder_new(G_VARIANT_TYPE ("a{sv}"));
            g_variant_builder_add(b, "{sv}", "Target", g_variant_new_string("ftp"));
            obex_dict = g_variant_builder_end(b);
            
            g_dbus_connection_call_sync(
                    conn,
                    BLUEZ_ORG,
                    "/org/bluez/obex",
                    "org.bluez.obex.Client1",
                    "CreateSession",
                    g_variant_new("(s{sv})", g_variant_new_string("/org/bluez/hci0/dev_5C_87_30_66_F4_35"), obex_dict),
                    NULL,
                    G_DBUS_CALL_FLAGS_NONE,
                    -1,
                    NULL,
                    &error);

            if (error != NULL)
                g_error(error->message);

运行此程序时出现这些错误:

(process:52242): GLib-CRITICAL **: 10:48:51.980: g_variant_new_string: assertion 'g_utf8_validate (string, -1, NULL)' failed 
(process:52242): GLib-CRITICAL **: 10:48:51.980: g_variant_new_string: assertion 'g_utf8_validate (string, -1, NULL)' failed

我不确定我在这里做错了什么。我检查了类型字符串。

【问题讨论】:

    标签: c glib dbus bluez


    【解决方案1】:

    似乎方法参数的签名应该是(sa{sv}){xy}x 类型到 y 类型的一个字典条目,字典在概念上是字典条目的“数组”。

    【讨论】:

      猜你喜欢
      • 2011-10-14
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 2018-03-06
      相关资源
      最近更新 更多