我不知道如何在GLib.Value中包装GLib.Array。
我试过这个代码。
public int main (string[] args) {
var value = Value(typeof (Array));
var a = new Array<string>();
a.append_val("test");
value.set_object((Object) a);
return 0;
}但它导致了这些错误。
(process:1797): GLib-GObject-WARNING **: invalid uninstantiatable type '(null)' in cast to 'GObject'
(process:1797): GLib-GObject-CRITICAL **: g_value_set_object: assertion 'G_VALUE_HOLDS_OBJECT (value)' failed发布于 2018-03-18 08:12:06
我认为GValue被用作单一类型的值的容器,而GArray是一个集合。GValue确实有一个type_compatible ()方法。在您的代码显示GLib不允许将GArray存储为GObject之前,使用该方法进行检查:
public int main (string[] args) {
if (!Value.type_compatible (typeof (Array), typeof (Object))) {
message ("Incompatible types");
return 1;
}
var value = Value(typeof (Array));
var a = new Array<string>();
a.append_val("test");
value.set_object((Object) a);
return 0;
}此代码在检查兼容类型的位置停止。
我不知道你想实现什么,但我建议你看看GVariant:
void main () {
string[] a = {"test"};
Variant variant = a;
print (variant.print(true) + "\n");
}如果您需要GValue,那么可以使用GValue的take_variant ()方法将GVariant存储在GValue中。
发布于 2018-03-19 17:55:49
GArray不是GObject。但是,它是一个boxed type (GValue中使用的更原始的类型标记版本),因此您应该能够使用value.set_boxed (a)将其存储在GValue中。
https://stackoverflow.com/questions/49341146
复制相似问题