如何在Kotlin / Native中设置嵌入式结构字段

问题描述

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,可能与此有关。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...