如何初始化 LPBOOL? Kotlin Native 中的 Win32 Api

How to initialize LPBOOL? Win32 Api in Kotlin Native

如何在 Kotlin Native 中调用它

    val result = CopyFileExA(
                          oldFile,
                          newFile,
                          null,
                          null,
                          false,
                          COPY_FILE_FAIL_IF_EXISTS
                         )

false 不被接受为 LPBOOL?如何初始化 LPBOOL 以在 Kotlin 本机接口中使用?

我收到以下错误:

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
}

重要,指针绑定将与 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 库绑定,则必须类似。