0

我有这个 2 个整数的数组,我想通过 dbus 发送。它总是抱怨 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);
4

1 回答 1

3

GVariantBuilder不打算用作 a 的有效负载GVariant:它是一个构建器模式对象,它将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()更多信息。

于 2020-05-25T15:12:16.827 回答