首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin-Native cinterop从C更新Struc字段

Kotlin-Native cinterop从C更新Struc字段
EN

Stack Overflow用户
提问于 2019-10-11 20:18:28
回答 1查看 276关注 0票数 0

我正在使用kotlin-native,并且必须将一个指向struc的指针传递给一个C函数。我的"Kotlin Stub“有fun SET_SM_REFS_INDEX(索引: Int,thisObject: CValuesRef?)的签名。

在本机方面,代码希望持有指向“thisObject”的指针,并希望更新结构中的字段,可能是在另一个线程中。例如,让我们将该字段称为整数"thisObject->myUpdate“。

现在,我尝试使用var AA = cValue<..>创建一个对象,并尝试将函数调用为SET_SM_REFS_INDEX(0,AA)。没有编译错误。然而,我注意到我的字段"AA.update“从不更新,总是保持为0。

阅读documentation https://kotlinlang.org/docs/tutorials/native/mapping-struct-union-types-from-c.html,它说明了一些关于使用kotlinx.cinterop.NativePlacement的事情“,但并没有深入到细节。

我可以看出,传递cValue可能是错误的,因为它具有byValue语义。

有人知道怎么做吗?

EN

回答 1

Stack Overflow用户

发布于 2019-10-12 01:08:12

好了,我想我找到答案了。在我的例子中:

而不是让

var AA = cValue<..>

一个人需要

var AA = nativeHeap.alloc<..>()

其中"..“是来自Klib存根的C结构类型。那么调用将是

SET_SM_REFS_INDEX(0,AA.ptr)

注意".ptr“,并记住在行的某处显式地释放内存

nativeHeap.free(AA)

我不得不使用nativeHeap,因为我在一个范围内使用了C结构,有点“全球化”。在memScope{}中,还有另一种更“本地”地使用alloc的方法,使用memScope时,您不需要显式地释放内存。

希望这能帮助到某人

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58341123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档