0
私はキーとしてuint16を使用し、それをバイトの配列にマップする辞書にG_Variantポインタを返そうとしています(つまり、 "a {qay}")。GLibの配列にマップする辞書を作成するにはどうすればよいですか?
は、ここに私の試みです:
#define KEY 0xDEAD
#define BYTE1 0xBE
#define BYTE2 0xEF
GVariantBuilder *arrBuilder, *builder;
GVariant *arr;
//build array of bytes ('ay')
arrBuilder = g_variant_builder_new(G_VARIANT_TYPE("ay"));
g_variant_builder_add(arrBuilder, "y", BYTE1);
g_variant_builder_add(arrBuilder, "y", BYTE2);
arr = g_variant_new("v",g_variant_new("ay", arrBuilder));
//put it in a dict ('a{sv}')
builder = g_variant_builder_new(G_VARIANT_TYPE("a{qay}"));
g_variant_builder_add(builder, "{qay}", KEY, arr);
return g_variant_builder_end(builder);
それがうまくいかないと、私はD-バス上でこのプロパティを照会しようとすると、私は、次のエラーメッセージが表示されます。
(process:18319): GLib-CRITICAL **: g_variant_builder_end: assertion 'is_valid_builder (builder)' failed
(process:18319): GLib-CRITICAL **: g_variant_get_type: assertion 'value != NULL' failed
(process:18319): GLib-CRITICAL **: g_variant_type_is_array: assertion 'g_variant_type_check (type)' failed
(process:18319): GLib-CRITICAL **: g_variant_get_type_string: assertion 'value != NULL' failed
(process:18319): GLib-ERROR **: g_variant_new: expected array GVariantBuilder but the built value has type '(null)'
Trace/breakpoint trap (core dumped)
)=あなたが書いたものをしようとしたとき、私はあなたと同じエラーが発生した、これは作品を作った私はあなたの提案を試してみましたが、私は同じエラーメッセージが表示されます。私も試みた: "arr = g_variant_new(" ay "、g_variant_builder_end(arrBuilder));"同じ結果で同じ行に表示されます。うーん –