Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin/Native:如何修改CArrayPointer?_Kotlin_Kotlin Multiplatform_Kotlin Native - Fatal编程技术网

Kotlin/Native:如何修改CArrayPointer?

Kotlin/Native:如何修改CArrayPointer?,kotlin,kotlin-multiplatform,kotlin-native,Kotlin,Kotlin Multiplatform,Kotlin Native,我试图用K/N和libsecret。 它包括以下结构: typedef结构{ const gchar*名称; 秘密方案旗帜; SecretSchemaAttribute属性[32]; }分泌图式; (从这里开始:) cinterop生成了以下类: @kotlinx.cinterop.internal.CStruct公共最终类SecretSchema公共构造函数(rawPtr:kotlinx.cinterop.NativePtr/*=kotlin.native.internal.NativePt

我试图用K/N和libsecret。 它包括以下结构:

typedef结构{
const gchar*名称;
秘密方案旗帜;
SecretSchemaAttribute属性[32];
}分泌图式;
(从这里开始:)

cinterop生成了以下类:

@kotlinx.cinterop.internal.CStruct公共最终类SecretSchema公共构造函数(rawPtr:kotlinx.cinterop.NativePtr/*=kotlin.native.internal.NativePtr*/):kotlinx.cinterop.CStructVar{
@kotlinx.cinterop.internal.CStruct.VarType公共伴随对象:kotlinx.cinterop.CStructVar.Type{
}
公共最终val属性:kotlinx.cinterop.CArrayPointer/*=kotlinx.cinterop.CPointer*/*编译代码*/
公共最终var标志:org.libsecret.SecretSchemaFlags/*=kotlin.UInt*/*编译代码*/
公共最终变量名:kotlinx.cinterop.CPointer?/*编译代码*/
保留公共最终变量:org.libsecret.gint/*=kotlin.Int*/*编译代码*/
公共最终var reserved1:org.libsecret.gpointer?/*=kotlinx.cinterop.CPointer?*/*编译代码*/
公共最终var reserved2:org.libsecret.gpointer?/*=kotlinx.cinterop.CPointer?*/*编译代码*/
公共最终var reserved3:org.libsecret.gpointer?/*=kotlinx.cinterop.CPointer?*/*编译代码*/
公共最终var保留4:org.libsecret.gpointer?/*=kotlinx.cinterop.CPointer?*/*编译代码*/
公共最终var保留5:org.libsecret.gpointer?/*=kotlinx.cinterop.CPointer?*/*编译代码*/
公共最终var保留6:org.libsecret.gpointer?/*=kotlinx.cinterop.CPointer?*/*编译代码*/
公共最终var保留7:org.libsecret.gpointer?/*=kotlinx.cinterop.CPointer?*/*编译代码*/
}
我试着这样定义它:

alloc{
name=“com.charlag.tuta桥”。cstr.ptr
标志=机密模式\u无
}
但是,我看不到修改
属性的方法,因为
CArrayPointer
CPointer
)不公开修改方法

我还注意到一些保留的
字段。我应该改用它们吗

下面是如何在C中使用它的示例:

据我所知,这里最简单的选择是使用
[]
运算符,并将分配的
SecretSchemaAttribute
分配给这些地址。要了解有关指针类型交互的更多信息,请选中此项。这可能有点过时,但可以在这里或kotlinlang Slack提出进一步的问题。

似乎默认情况下没有办法,我最终做了以下工作:

/**
*这是标准库中缺少的函数版本。它初始化成员
*数组的一部分。
*如果可能,请分配正确元素的数组。使用C可能不可能
*结构。
*/
内联fun CArrayPointer.setAt(索引:Int,值:CValue){
value.write(this.rawValue+index*sizeOf())
}

它适用于我,并使用与access相同的指针位置计算

这不起作用,因为对于任意类型,只有原语,没有
set
重载。