FFI 콜백에 예외 반환값이 없는 경우

FFI 콜백에 예외 반환값이 없는 경우 (missing_exception_value)

Pointer.fromFunction이나 NativeCallable.isolateLocal를 호출할 때, 반환되는 타입이 voidHandlePointer도 아니라면 예외 반환값(두 번째 인자)을 넣어야 하는데 그게 없을 때 나오는 진단이에요.

출처: The method {0} must have an exceptional return value (the second argument) when the return type of the function is neither 'void', 'Handle', nor 'Pointer'.

본문

이 진단은 Pointer.fromFunction 또는 NativeCallable.isolateLocal 메서드를 호출할 때, 그 호출에서 반환될 타입이 voidHandlePointer도 아닌데 두 번째 인자(예외 반환값)가 없을 때 분석기가 만들어내요.

FFI에 대해 더 알고 싶다면 C interop using dart:ffi 문서를 참고하세요.

예시

아래 코드는 f가 반환하는 타입이 8비트 정수(Int8)로 기대되는데, fromFunction 호출에 예외 반환 인자가 없어서 이 진단이 나와요.

import 'dart:ffi';

int f(int i) => i * 2;

void g() {
  Pointer.fromFunction<Int8 Function(Int8)>(f);
}

해결 방법

예외 반환 값을 추가해 주세요.

import 'dart:ffi';

int f(int i) => i * 2;

void g() {
  Pointer.fromFunction<Int8 Function(Int8)>(f, 0);
}

더 알아보기