我如何在 Kotlin Native 中调用它
val result = CopyFileExA(
oldFile,
newFile,
null,
null,
false,
COPY_FILE_FAIL_IF_EXISTS
)
而
false
不被接受为 LPBOOL
?如何初始化 LPBOOL 以在 Kotlin native 界面中使用?我收到以下错误:
the boolean literal does not conform to the expected type
LPBOOL? /* = CPointer */>? */ false,
最佳答案
回答 github from @olonho 中已有的问题
您需要使用特殊平台类型 NativePlacement 分配变量
import kotlinx.cinterop.*
import platform.windows.*
val buffer = nativeHeap.allocArray<ByteVar>(size)
<use buffer>
nativeHeap.free(buffer)
但是为了避免免费调用或未分配的内存,您可以使用 memScoped
val fileSize = memScoped {
val statBuf = alloc<statStruct>()
val error = stat("/", statBuf.ptr)
statBuf.st_size
}
重要的是,指针绑定(bind)将与 statBuf.ptr,那么您的代码将是:
memScoped {
val oldFile = "README.md"
val newFile = "${oldFile}.cp"
val bool = alloc<BOOLVar>()
bool.value = FALSE
val result = CopyFileExA(
oldFile,
newFile,
null,
null,
bool.ptr,
COPY_FILE_FAIL_IF_EXISTS
)
}
如果您需要与objective-c 库绑定(bind),这必须是相似的。
关于winapi - 如何初始化 LPBOOL? Kotlin Native 中的 Win32 Api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52281549/