종종 이런 부분과 같이 error를 CPointer로 받는 아이들이 있는데, 어떻게 할당하고 받아오는지 당최 모를 때가 많았다. 이 때문에 블로그에 따로 정리를 하려고 한다.
먼저 메모리 할당을 위해서는 `memScoped` 블록을 만들어 주어야 한다.
이후 타입에 따라 다음과 같은 CPointer를 만들어준다.
val error = interpretCPointer<ObjCObjectVar<NSError?>>(alloc(sizeOf<ObjCObjectVar<NSError?>>(), alignOf<ObjCObjectVar<NSError?>>()).rawPtr)
이후 이 포인터를 요하는 곳에 `error`를 넣어준다. 그러면 이 값을 어떻게 받는가?
val err = error?.pointed?.value // NSError 가져오기
println("Copy failed: ${err?.localizedDescription ?: "Unknown error"}")
이런 식으로, 해당 포인터의 값을 받아올 수 있다.
`copyItemAtPath` 함수뿐 아니라 다양한 곳에서 해당 부분을 응용하면 된다.
'코틀린 멀티플랫폼 KMP 개발 > 📚 KMP 공부' 카테고리의 다른 글
[KMP iOS] 시스템 사운드를 가져올 때 (1) | 2024.08.16 |
---|