从Kotlin/native传递值给c



如何将Kotlin的值作为int*传递给C并接收写入的值?C函数看起来像这样:

int readValue(long param, int *value);

返回值仅为1或0,表示成功或失败。读取的实际值通过值指针传回。我尝试用cValuesOf:

包装Kotlin Int
import interop.readValue
fun doIt(): Boolean {
val arg = cValuesOf(0) // This should give me a CValue<Int>, right?
val result = readValue(42L, arg) // Here I call the C function

if (result == 0) {
return false
} else {
println("Read value: ${arg.value}") // doesn't work, there is no arg.value
return true
}
}

但是在调用之后我无法从中得到结果。我该怎么做呢?

因为Kotlin不像C那样在堆栈上分配变量,所以您需要在堆上分配一个int*作为KotlinIntVarOf<Int>memScoped()提供了一个内存作用域,其中分配的内存将在lambda块结束时自动释放。

fun doIt(): Boolean {
return memScoped {
val arg = alloc<IntVar>()
val result = readValue(42L, arg.ptr)
if (result == 0) {
false
} else {
println("Read value: ${arg.value}")
true
}
}
}

相关内容

  • 没有找到相关文章

最新更新