如何初始化 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 库绑定,则必须类似。
如何在 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 库绑定,则必须类似。