kotlin native usePinned

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32768743/article/details/87158391

翻到文档
在这里插入图片描述
真简洁,看到用Pinned包装了一下
在这里插入图片描述
kotlin扩展方法神器
在这里插入图片描述
在这里插入图片描述
在CLion中查看


public fun kotlinx.cinterop.Pinned<kotlin.ByteArray>.addressOf(index: kotlin.Int): kotlinx.cinterop.CPointer<kotlinx.cinterop.ByteVar /* = kotlinx.cinterop.ByteVarOf<kotlin.Byte> */> { /* compiled code */ }

public fun kotlinx.cinterop.Pinned<kotlin.DoubleArray>.addressOf(index: kotlin.Int): kotlinx.cinterop.CPointer<kotlinx.cinterop.DoubleVar /* = kotlinx.cinterop.DoubleVarOf<kotlin.Double> */> { /* compiled code */ }

public fun kotlinx.cinterop.Pinned<kotlin.FloatArray>.addressOf(index: kotlin.Int): kotlinx.cinterop.CPointer<kotlinx.cinterop.FloatVar /* = kotlinx.cinterop.FloatVarOf<kotlin.Float> */> { /* compiled code */ }

public fun kotlinx.cinterop.Pinned<kotlin.IntArray>.addressOf(index: kotlin.Int): kotlinx.cinterop.CPointer<kotlinx.cinterop.IntVar /* = kotlinx.cinterop.IntVarOf<kotlin.Int> */> { /* compiled code */ }

public fun kotlinx.cinterop.Pinned<kotlin.LongArray>.addressOf(index: kotlin.Int): kotlinx.cinterop.CPointer<kotlinx.cinterop.LongVar /* = kotlinx.cinterop.LongVarOf<kotlin.Long> */> { /* compiled code */ }

public fun kotlinx.cinterop.Pinned<kotlin.ShortArray>.addressOf(index: kotlin.Int): kotlinx.cinterop.CPointer<kotlinx.cinterop.ShortVar /* = kotlinx.cinterop.ShortVarOf<kotlin.Short> */> { /* compiled code */ }

public fun kotlinx.cinterop.Pinned<kotlin.UByteArray>.addressOf(index: kotlin.Int): kotlinx.cinterop.CPointer<kotlinx.cinterop.UByteVar /* = kotlinx.cinterop.UByteVarOf<kotlin.UByte> */> { /* compiled code */ }

public fun kotlinx.cinterop.Pinned<kotlin.UIntArray>.addressOf(index: kotlin.Int): kotlinx.cinterop.CPointer<kotlinx.cinterop.UIntVar /* = kotlinx.cinterop.UIntVarOf<kotlin.UInt> */> { /* compiled code */ }

public fun kotlinx.cinterop.Pinned<kotlin.ULongArray>.addressOf(index: kotlin.Int): kotlinx.cinterop.CPointer<kotlinx.cinterop.ULongVar /* = kotlinx.cinterop.ULongVarOf<kotlin.ULong> */> { /* compiled code */ }

public fun kotlinx.cinterop.Pinned<kotlin.UShortArray>.addressOf(index: kotlin.Int): kotlinx.cinterop.CPointer<kotlinx.cinterop.UShortVar /* = kotlinx.cinterop.UShortVarOf<kotlin.UShort> */> { /* compiled code */ }

我想用char,看来是不行的了,必须是数值类型
再看翻到的文档,中文和英文的还是有点差别的
首先是官方英文
在这里插入图片描述
大意是usePinned后,数据的地址就不会变了。也就是说kn普通的地址会变,有垃圾回收?
中文版的没翻译,这个英文写得很直白,就是用usePinned再怎么操作在kotlin这边接收c字符串数据。不过,我没有在现在官网的文档中找到这个话,不知道移动到哪个地方去了。
在这里插入图片描述

小结一下

usePinned可以让kt变量在内存中的位置不变动,而addressOf可以取得相应的地址,类似c中的&arr[index],目前提供的接口,只允许数值类型的数组使用。
至于新出现的类CPointerxxxVar,下次再说吧

猜你喜欢

转载自blog.csdn.net/qq_32768743/article/details/87158391