Kotlin/Native:如何修改CArrayPointer?
我试图用K/N和libsecret。 它包括以下结构: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
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
重载。