问题描述
Kotlin cinterop为C结构生成了这样的包装器:
@kotlinx.cinterop.internal.CStruct public final class _GtkAccelGroupEntry public constructor(rawPtr: kotlinx.cinterop.NativePtr /* = kotlin.native.internal.NativePtr */) : kotlinx.cinterop.CStructvar {
@kotlinx.cinterop.internal.CStruct.VarType public companion object : kotlinx.cinterop.CStructvar.Type {
}
public final var accel_path_quark: gtk3.GQuark /* = kotlin.UInt */ /* compiled code */
public final var closure: kotlinx.cinterop.CPointer<gtk3.GClosure /* = gtk3._GClosure */>? /* compiled code */
public final val key: gtk3.GtkAccelKey /* = gtk3._GtkAccelKey */ /* compiled code */
}
我认为最后一个字段(键)是val
,因为它也是结构包装器。
有什么方法可以在不诉诸不安全内存访问的情况下初始化此类字段?
这是原始的C结构:
struct _GtkAccelKey
{
guint accel_key;
GdkModifierType accel_mods;
guint accel_flags : 16;
};
struct _GtkAccelGroupEntry
{
GtkAccelKey key;
GClosure *closure;
GQuark accel_path_quark;
};
解决方法
对不起,但是据我所知,除了直接操纵之外,没有其他可用的方法。我在kotlinlang Slack上发现了discussion,可能与此有关。