lookupFunction< T extends Function, F extends Function > 方法

F lookupFunction<T extends Function, F extends Function >>(
  1. String symbolName, {
  2. bool isLeaf = false,
})

查找本地函数并将其作为 Dart 函数返回。

T 是 C 函数签名,而 F 是 Dart 函数签名。

例如

int32_t add(int32_t a, int32_t b) {
  return a + b;
}
DynamicLibrary dylib = DynamicLibrary.executable();
final add = dylib.lookupFunction<Int32 Function(Int32, Int32), int Function(int, int)>(
        'add');

isLeaf 指定函数是否是叶子函数。叶子函数是小型、短运行、非阻塞函数,不允许调用 Dart 或使用任何 Dart VM API。叶子函数通过绕过标准 Dart 到 Native 调用序列的一些较重的部分来调用,从而减少调用开销,使叶子调用比非叶子调用更快。然而,这也意味着执行叶子函数的线程不能与 Dart 运行时协作。长时间运行或阻塞的叶子函数将延迟任何需要在隔离组关联的所有线程之间同步的操作,直到叶子函数返回。例如,如果组中的一个隔离区正在尝试执行 GC,而第二个隔离区在叶子调用中被阻塞,那么第一个隔离区将必须暂停并等待此叶子调用返回。

实现

external F lookupFunction<T extends Function, F extends Function>(
    String symbolName,
    {bool isLeaf = false});