Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

147
Vistas
No se puede hacer referencia al paquete kotlinx.cinterop en el proyecto Kotlin Multiplatform

Creé un proyecto multiplataforma de Kotlin basado en el ejemplo para iOS y Android ( https://kotlinlang.org/docs/tutorials/native/mpp-ios-android.html ). Dentro de mi objetivo de iOS, estoy usando cinterop para vincular en un marco Objective-C de terceros. Esto está funcionando bien. Puedo hacer referencia a las clases del marco en mi código Kotlin dentro del conjunto de fuentes 'iosMain'. Sin embargo, una de las llamadas a métodos requiere un parámetro NSError**. Estoy intentando usar lo siguiente para crear esta variable en mi código Kotlin:

 kotlinx.cinterop.NativePlacement.allocPointerTo<kotlinx.cinterop.ObjCObjectVar<platform.Foundation.NSError?>()

No he podido solucionar los siguientes errores:

 > 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?>()

Tengo entendido que este paquete es parte de stdlib, que debe agregarse como una dependencia automáticamente. ¿Me estoy perdiendo una parte de la ecuación en alguna parte?

ACTUALIZAR

El siguiente es un ejemplo de pasar una referencia NSError* de Kotlin:

 memScoped { val errorRef = alloc<ObjCObjectVar<NSError?>>() someObjCObject.method(errorRef.ptr) }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

kotlinx.cinterop.NativePlacement es un nombre de interfaz, no un nombre de clase. Necesita una instancia de la interfaz NativePlacement para funcionar. Por ejemplo memscoped{..} funcionará, por ejemplo

 import kotlinx.cinterop.* import platform.Foundation.* val p = memScoped { allocPointerTo<ObjCObjectVar<NSError?>>() }

El memscoped{..} acepta una lambda, dentro de la lambda el receptor implementa el tipo NativePlacement , por lo que no es necesario que un calificador llame a una función en él

https://kotlinlang.org/docs/reference/lambdas.html#function-literals-with-receiver

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda