Kotlin Native cinterop从C更新Struc字段
我使用的是kotlin native,必须将指向struc的指针传递给C函数。我的“Kotlin存根”具有fun SET\u SM\u REFS\u INDEX(INDEX:Int,thisObject:CValuesRef?)的签名 在本机端,代码希望保留指向“thisObject”的指针,并希望更新结构中的字段(可能在另一个线程中)。例如,让我们将该字段称为整数“thisObject->myUpdate” 现在,我尝试使用var AA=cValue创建一个对象,并尝试按如下方式调用函数 设置索引(0,AA)。没有编译错误。但是我注意到我的字段“AA.update”从未更新,始终保持在0 在阅读文档时,它说了一些关于可能使用kotlinx.cinterop.NativePlacement的内容,但没有详细说明 我可以看出,cValue可能是错误的传递对象,因为它具有byValue语义Kotlin Native cinterop从C更新Struc字段,kotlin,kotlin-native,Kotlin,Kotlin Native,我使用的是kotlin native,必须将指向struc的指针传递给C函数。我的“Kotlin存根”具有fun SET\u SM\u REFS\u INDEX(INDEX:Int,thisObject:CValuesRef?)的签名 在本机端,代码希望保留指向“thisObject”的指针,并希望更新结构中的字段(可能在另一个线程中)。例如,让我们将该字段称为整数“thisObject->myUpdate” 现在,我尝试使用var AA=cValue创建一个对象,并尝试按如下方式调用函数 设置
有人知道怎么做吗?好的,我想我找到了答案。例如: 而不是 var AA=cValue 需要 var AA=nativeHeap.alloc() 其中“.”是Klib存根中的C结构类型 设置索引(0,AA.ptr) 请注意“.ptr”,并记住在该行的某个位置显式释放内存 nativeHeap.free(AA) 我必须使用nativeHeap,因为我在一个保持不变的作用域中使用C结构,有点“全球化”。还有另一种方法可以在memScope{}中更“本地”地使用alloc,而在memScope中,您不需要明确地释放内存 希望这对别人有帮助