跳至主内容

leaf_call_must_not_take_handle

FFI leaf call 不能接受 'Handle' 类型的参数。

描述

#

当调用 Pointer.asFunctionDynamicLibrary.lookupFunction 时,如果 isLeaf 参数的值为 true 且返回的函数包含 Handle 类型的参数,分析器会产生此诊断消息。

有关 FFI 的更多信息,请参阅 使用 dart:ffi 进行 C 互操作

示例

#

以下代码会产生此诊断消息,因为函数 p 有一个 Handle 类型的参数,但 isLeaf 参数为 true

dart
import 'dart:ffi';

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

常见修复方法

#

如果函数至少有一个 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);
}