저는 C에서 매우 간단한 함수를 가지고 있고 포인터는 Swift로 전달됩니다.신속한 알고있는 메모리 주소에서 C 함수를 호출하십시오.
void callback() {
NSLog(@"such pointer…");
}
은 어떻게 만 포인터를 사용하여 신속한에서 호출 할 수 있습니까? 이것은 단순히 이 아닌 약입니다. 직접 호출하면 올바르게 작동합니다. 서명 캐스팅 다음과 같은 다른 변화를 시도하지만 항상 충돌 :
let pointer: UnsafePointer<@convention(c)() ->()> = UnsafePointer(bitPattern: …)
let callback: @convention(c)() ->() = pointer.memory
Swift.print(callback) // (Function)
callback() // Handling crash with signal 11...
가 typedef void(*Callback)();
와 Callback
유형을 정의 시도 - 같은 일 :
let pointer: UnsafePointer<Callback> = UnsafePointer(bitPattern: …)
let callback: Callback = pointer.memory
Swift.print(callback) // (Function)
callback() // Handling crash with signal 11...
가 실제로 오른쪽으로 작동하고 포인트를 확인하기 위해 주소 나는 콜백 포인터와 Swift에서 호출 할 때 예상대로 작동하는 다른 Objective-C 함수가 있습니다.
void invokeCallback(uintptr_t callback) {
((void (*)()) callback)(); // such pointer…
}
어떻게 포인터를 얻습니까? 그것의 정의/선언은 무엇입니까? – Alexander