-1

我如何在 Kotlin Native 中调用它

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

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

我收到以下错误:

布尔文字不符合预期的类型

LPBOOL?/* = CPointer */>? */ 错误的,

4

1 回答 1

1

从@olonho回答已经在github中的问题

您需要使用特殊的平台类型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 库绑定,这必须是相似的。

于 2018-09-14T09:53:41.450 回答