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

标签 winapi kotlin compiler-errors native kotlin-native

我如何在 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/

相关文章:

c - 64 位 Windows : longjmp lands in a wrong place

java - 如果 Maybe 完成,则从其他来源将 Maybe 转换为 Single

android - Eclipse中未定义的外部引用

c++ - 在 C++ 中返回生成的数组

winapi - GetDeviceCaps 的 HORZSIZE

c++ - winapi - SetLayeredWindowAttributes with LWA_COLORKEY 仅将像素设置为完全不透明或完全透明?

C++ 将wav文件放入dll

android - 如何使用 sqldelight 读取位于 Assets 中的数据库文件 - Android

android - Kotlin:带实时数据的协程还是只有协程?

Java 异常 IOException 永远不会在相应的 try 语句主体中抛出?