You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin/Native应用中初始化WinAPI的COORD结构体?

解决Kotlin/Native中COORD结构体初始化报错问题

你需要正确初始化COORD结构体的X和Y字段(起始位置均为0),Kotlin/Native提供了多种方式构造CValue<COORD>,以下是两种可行的修正方案:

方案1:使用alloc分配结构体并赋值

在memScoped块中先分配COORD内存,设置坐标值后转为CValue:

import kotlinx.cinterop.*
import platform.windows.*
import platform.posix.*

@kotlinx.cinterop.ExperimentalForeignApi
fun main() {
    platform.windows.Sleep(333u)

    val h: HANDLE? = GetStdHandle(STD_OUTPUT_HANDLE)

    memScoped {
        val coordPtr = alloc<COORD>()
        coordPtr.X = 0 // 横坐标起始位置
        coordPtr.Y = 0 // 纵坐标起始位置
        val coord = coordPtr.readValue()

        platform.windows.SetConsoleCursorPosition(h, coord)
    }
}

方案2:直接用cValue构造CValue<COORD>

通过cValue函数的lambda直接初始化结构体字段,写法更简洁:

import kotlinx.cinterop.*
import platform.windows.*
import platform.posix.*

@kotlinx.cinterop.ExperimentalForeignApi
fun main() {
    platform.windows.Sleep(333u)

    val h: HANDLE? = GetStdHandle(STD_OUTPUT_HANDLE)

    memScoped {
        val coord = cValue<COORD> {
            X = 0
            Y = 0
        }

        platform.windows.SetConsoleCursorPosition(h, coord)
    }
}

两种方案都能正确初始化COORD结构体,解决未初始化报错,实现将控制台光标定位到窗口起始位置。

内容的提问来源于stack exchange,提问作者Барон Мюнхаузен

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:19:53