2017-07-07 30 views
0

私はdbusより2つの次元の配列を送信しようとしています(私はgdbus-codegenを使ってgdbus apiを使っています)。
私はdbusインタフェースを次のように定義しました。gdbus上で2次元配列を送信する方法は?

<method name="foo"> 
      <arg name="count" direction="out" type="i" /> 
      <arg name="array" direction="out" type="a(ia(s))" /> 
</method> 

私は次のようにGVariantを作成しようとしています:

pack_string_arrayはgvariantにCスタイルの文字列の配列をパック
GVariantBuilder *builder; 
GVariant *variant; 
builder = g_variant_builder_new(G_VARIANT_TYPE("a(ia(s))")); 
for (int i = 0; i < count; i++) 
{ 
    g_variant_builder_add(builder, "(ia(s))", 
          options[i].num_supported, 
          pack_string_array(options[i].num_supported, options[i].supported_values)); 
} 

variant = g_variant_new("a(a(s))", builder); 
my_interface_complete_foo(interface, invocation, count, variant); 

GVariant* pack_string_array(int num_val, char **val) 
{ 
    GVariantBuilder *builder; 
    GVariant *values; 
    builder = g_variant_builder_new(G_VARIANT_TYPE("a(s)")); 
    for (int i = 0; i < num_val; i++) 
    { 
     g_message("%s", val[i]); 
     g_variant_builder_add(builder, "(s)", val[i]); 
    } 

    if (num_val == 0) 
     g_variant_builder_add(builder, "(s)", "NA"); 

    values = g_variant_new("a(s)", builder); 
    return values; 
} 

しかし、私は、次のエラーでプログラムがクラッシュし、それをテストする場合:

GLib-CRITICAL **: g_variant_builder_end: assertion 'ensure_valid_builder (builder)' failed 
g_variant_get_type: assertion 'value != NULL' failed 

私はDBUS上の文字列の配列の配列を送信することができますどのように?ビルダーおよびバリアントのために使用さ

答えて

0

署名が一致しません:

builder = g_variant_builder_new(G_VARIANT_TYPE("a(ia(s))")); 
... 
variant = g_variant_new("a(a(s))", builder); 
0
GVariantBuilder* builder = g_variant_builder_new(G_VARIANT_TYPE("a(ia(s))")); 

for (int i = 0; i < count; i++) { 

    GVariantBuilder* builderStr = g_variant_builder_new(G_VARIANT_TYPE("a(s)")); 
    for (int j = 0; j < nr_of_string; j++) { 
     g_variant_builder_add(builderStr, "(s)", "Test"); 
    } 
    g_variant_builder_add(builder, "(ia(s))", 32, **builderStr**); 
} 

GVariant* retVariant = g_variant_builder_end(builder); 
関連する問題