포인터의 함수 시그니처가 유효한 C 함수 시그니처가 아니에요

포인터의 함수 시그니처가 유효한 C 함수 시그니처가 아니에요

네이티브 함수를 가리키는 포인터에서 asFunction 메서드를 호출했는데, 그 네이티브 함수의 시그니처가 유효한 C 함수 시그니처가 아닐 때 분석기가 알려주는 진단이에요.

출처: non_native_function_type_argument_to_pointer

본문

네이티브 함수를 가리키는 포인터에서 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 자료를 참고해요.