如何在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,提问作者Барон Мюнхаузен
相关产品推荐
相关产品推荐

