小编Jak*_*bst的帖子

Kotlin 对象到 CPointer

我正在尝试将 Kotlin 对象传递给 C 库,该库会将该对象传递给回调函数。这个函数是用 Kotlin 编写的,因此我可以使用这个对象并使用它。但是我找不到将 Kotlin 对象转换为 CPointer 的方法。我发现的唯一可能是我需要的东西是fun createKotlinObjectHolder(any: Any?): NativePtrfun <reified T : Any> unwrapKotlinObjectHolder(holder: Any?): T。但即使我使用刚刚创建的NativePtr将其传递给解包函数,它也会失败并显示错误消息unrecognized selector sent to instance 0xXYZ。我做错了什么或者这些功能不是我应该使用的?

使用 libcURL 的示例代码:

fun writeCallback(ptr: CPointer<ByteVar>, ignored: ULong, size: ULong, userData: COpaquePointer?): ULong {
    if (userData != null) {
        unwrapKotlinObjectHolder<StringBuilder>(userData.rawValue).append("Hello")
    }
    return size
}

fun main() {
    ...
    val curl = curl_easy_init()
    ...
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, staticCFunction(::writeCallback))

    val stringBuilder = StringBuilder()
    val nativePtr = createKotlinObjectHolder(stringBuilder)
    val cPtr …
Run Code Online (Sandbox Code Playgroud)

kotlin-native

1
推荐指数
1
解决办法
627
查看次数

标签 统计

kotlin-native ×1