Я создал проект Kotlin Multiplatform на основе примера для iOS и Android (https://kotlinlang.org/docs/tutorials/native/mpp-ios-android.html).) В моей цели iOS я использую cinterop для связи в сторонней платформе Objective-C. Это работает нормально. IЯ могу ссылаться на классы каркаса в моем коде Kotlin в исходном наборе 'iosMain'. Однако для одного из вызовов метода требуется параметр NSError **. Я пытаюсь использовать следующее для создания этой переменной в моем коде Kotlin:
kotlinx.cinterop.NativePlacement.allocPointerTo<kotlinx.cinterop.ObjCObjectVar<platform.Foundation.NSError?>()
Мне не удалось отыскать следующие ошибки:
> Task :sharedLib:linkMainDebugFrameworkIOS FAILED
src/iosMain/kotlin/Platform.kt:9:50: error: unresolved reference: allocPointerTo
val error = kotlinx.cinterop.NativePlacement.allocPointerTo<kotlinx.cinterop.ObjCObjectVar<platform.Foundation.NSError?>()
^
src/iosMain/kotlin/Platform.kt:9:126: error: no value passed for parameter 'rawPtr'
val error = kotlinx.cinterop.NativePlacement.allocPointerTo<kotlinx.cinterop.ObjCObjectVar<platform.Foundation.NSError?>()
Насколько я понимаю, этот пакет является частью stdlib, который должен быть автоматически добавлен в качестве зависимости.Я где-то пропускаю часть уравнения?
ОБНОВЛЕНИЕ
Ниже приведен пример передачи ссылки NSError * от Kotlin:
memScoped {
val errorRef = alloc<ObjCObjectVar<NSError?>>()
someObjCObject.method(errorRef.ptr)
}