メインコンテンツにスキップ

leaf_call_must_not_take_handle

FFI leaf 呼び出しでは、'Handle' 型の引数を受け取ることはできません。

説明

#

isLeaf 引数が true で、返される関数が Handle 型のパラメータを持つ場合、アナライザーはこの診断を生成します。これは、Pointer.asFunction または DynamicLibrary.lookupFunction の呼び出しで発生します。

FFI の詳細については、dart:ffi を使用した C の相互運用 を参照してください。

#

以下のコードは、関数 pHandle 型のパラメータを持ち、isLeaf 引数が true であるため、この診断を生成します。

dart
import 'dart:ffi';

void f(Pointer<NativeFunction<Void Function(Handle)>> p) {
  p.asFunction<void Function(Object)>(isLeaf: true);
}

一般的な修正

#

関数が少なくとも 1 つの Handle 型のパラメータを持つ場合は、isLeaf 引数を削除してください。

dart
import 'dart:ffi';

void f(Pointer<NativeFunction<Void Function(Handle)>> p) {
  p.asFunction<void Function(Object)>();
}

関数のパラメータが Handle でない場合は、型情報を修正してください。

dart
import 'dart:ffi';

void f(Pointer<NativeFunction<Void Function(Int8)>> p) {
  p.asFunction<void Function(int)>(isLeaf: true);
}