如何将Kotlin的值作为int*传递给C并接收写入的值?C函数看起来像这样:
int readValue(long param, int *value);
返回值仅为1或0,表示成功或失败。读取的实际值通过值指针传回。我尝试用cValuesOf:
包装Kotlin Intimport 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
}
}
}