如何在 Kotlin Native 中称呼它
val result = CopyFileExA(
oldFile,
newFile,
null,
null,
false,
COPY_FILE_FAIL_IF_EXISTS
)
而false
不被接受为LPBOOL
?如何初始化 LPBOOL 以在 Kotlin 本机接口中使用?
我收到以下错误:
布尔文本不符合预期类型
LPBOOL?/* = CPointer */>?*/假
回答 github 中已有的问题 @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
}
重要的是,指针绑定将使用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 库绑定,这必须是类似的。