【问题标题】:GVariantBuilder build a(ii) or a(vv)GVariantBuilder 构建 a(ii) 或 a(vv)
【发布时间】:2020-05-25 06:15:27
【问题描述】:

我想通过 dbus 发送这个包含 2 个 int 的数组。 它总是抱怨 value 不是 tuple 或 null 类型 取决于尝试。它需要什么样子?

    GVariantBuilder builder;
    g_variant_builder_init(&builder, G_VARIANT_TYPE("a(ii)"));
    g_variant_builder_add(&builder, "(ii)", 99, 99);
    g_variant_builder_add(&builder, "(ii)", 98, 98);
    GVariant *value = g_variant_new("a(ii)", &builder);
    g_dbus_method_invocation_return_value(invocation, value));

    //g_dbus_method_invocation_return_value(invocation, &value)); - also tried

     //Previous attempts
    //GVariantBuilder *builder; 
    // builder = g_variant_builder_new(G_VARIANT_TYPE("a(ii)"));
    //g_variant_builder_add(&builder, "(ii)", 99, 99);
    //g_variant_builder_add(&builder, "(ii)", 98, 98);
    //and
    //g_variant_builder_add(builder, "(ii)", 99, 99);
   //g_variant_builder_add(builder, "(ii)", 98, 98);

【问题讨论】:

    标签: c glib gvariant


    【解决方案1】:

    GVariantBuilder 不打算用作GVariant 的有效负载:它是一个builder pattern object,它将根据其内容构造GVariant

    GVariantBuilder builder;
    
    // Initialize the GVariantBuilder with the final type
    g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ii)"));
    
    // Add the contents of the variant
    g_variant_builder_add (&builder, "(ii)", 99, 99);
    g_variant_builder_add (&builder, "(ii)", 98, 98);
    
    // Construct the variant from the builder
    GVariant *v = g_variant_builder_end (&builder);
    

    您应该查看g_variant_builder_init()g_variant_builder_end() 的文档以了解更多信息。

    【讨论】:

      猜你喜欢
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 2015-02-19
      • 2017-11-21
      • 2014-09-24
      • 1970-01-01
      相关资源
      最近更新 更多