将值从Kotlin/原生传递到C

sd2nnvve  于 2022-12-19  发布在  Kotlin
关注(0)|答案(1)|浏览(151)

如何将Kotlin中的一个值作为int* 传递给C并接收写入的值?C函数如下所示:

int readValue(long param, int *value);

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

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
    }
}

但是我打完电话之后就拿不出来结果了,我怎么做才合适呢?

nwnhqdif

nwnhqdif1#

因为Kotlin不像C那样在堆栈上分配变量,所以你需要在堆上分配一个int*作为Kotlin IntVarOf<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
        }
    }
}

相关问题