dart:ffi 的 void 函数

dart: void function for ffi

我正在尝试通过 dart:ffi

调用本地 C/C++ void 函数形式的 dart 端
final Void Function(void) funcNativeStart =
nativeGuestLib
    .lookup<NativeFunction<Void Function(void)>>("NativeStart")
    .asFunction();

这给我编译器错误

The type 'Void Function(void)' must be a subtype of 'Void Function(void)' for 'asFunction'

我试过一些编辑,例如

final Void Function() funcNativeStart =
nativeGuestLib
    .lookup<NativeFunction<Void Function()>>("NativeStart")
    .asFunction();
final Void Function(Void) funcNativeStart =
nativeGuestLib
    .lookup<NativeFunction<Void Function(Void)>>("NativeStart")
    .asFunction();

但结果都与我在第一个版本中得到的结果相似。

如何解决这个问题?

自己解决了。

工作版本应该是

final void Function() funcNativeStart =
nativeGuestLib
    .lookup<NativeFunction<Void Function()>>("NativeStart")
    .asFunction();

想法是,由于我们是 "translating" Dart 的原生类型(对于等式从右到左),我们应该使用等式左侧的 Dart 语言类型,以及 FFI右侧的本机类型。