invalid_exception_value 진단: FFI에서 예외 반환값을 쓸 수 없는 타입일 때
invalid_exception_value 진단: FFI에서 예외 반환값을 쓸 수 없는 타입일 때
Dart 분석기가 내보내는 진단에는 이름이 있어요. invalid_exception_value는 함수가 void, Handle, Pointer 타입을 반환할 때 예외 반환값(두 번째 인자)을 넘긴 경우 분석기가 알려주는 컴파일 타임 진단이에요. 요약하면, 그런 반환 타입에서는 예외 반환값을 가질 수 없어요.
본문
설명
분석기는 Pointer.fromFunction이나 NativeCallable.isolateLocal을 호출할 때 두 번째 인자(예외 반환값)가 있고, 그 호출로부터 반환되는 타입이 void, Handle, Pointer 중 하나일 때 이 진단을 만들어요.
FFI에 대해 더 알고 싶다면 dart:ffi를 쓰는 C interop 문서를 참고해요.
예시
아래 코드는 f의 반환 타입이 void인데 두 번째 인자를 넘겼기 때문에 이 진단이 나와요.
import 'dart:ffi';
typedef T = Void Function(Int8);
void f(int i) {}
void g() {
Pointer.fromFunction<T>(f, 42);
}
흔한 해결 방법
예외 반환값을 제거하면 돼요.
import 'dart:ffi';
typedef T = Void Function(Int8);
void f(int i) {}
void g() {
Pointer.fromFunction<T>(f);
}