포인터의 함수 시그니처가 유효한 C 함수 시그니처가 아니에요
포인터의 함수 시그니처가 유효한 C 함수 시그니처가 아니에요
네이티브 함수를 가리키는 포인터에서 asFunction 메서드를 호출했는데, 그 네이티브 함수의 시그니처가 유효한 C 함수 시그니처가 아닐 때 분석기가 알려주는 진단이에요.
본문
네이티브 함수를 가리키는 포인터에서 asFunction 메서드를 호출했는데, 그 네이티브 함수의 시그니처가 유효한 C 함수 시그니처가 아니면 이 진단이 발생해요.
FFI 에 대한 자세한 내용은 dart:ffi 를 이용한 C 연동 문서(C interop using dart:ffi)를 참고해요.
아래 코드는 포인터 p 와 연결된 함수 시그니처(FNative)가 유효한 C 함수 시그니처가 아니기 때문에 이 진단이 나와요.
import 'dart:ffi';
typedef FNative = int Function(int);
typedef F = int Function(int);
class C {
void f(Pointer<NativeFunction<FNative>> p) {
p.asFunction<F>();
}
}
고치는 방법
NativeFunction 시그니처를 유효한 C 시그니처로 만들어 주면 돼요.
import 'dart:ffi';
typedef FNative = Int8 Function(Int8);
typedef F = int Function(int);
class C {
void f(Pointer<NativeFunction<FNative>> p) {
p.asFunction<F>();
}
}
더 알아보기
- FFI 와 네이티브 함수 연동에 대한 자세한 내용은 Dart 공식 문서의 dart:ffi 및 C interop 자료를 참고해요.