我正在使用ffi
和tyed_data
Dart库,这行代码一直遇到错误
Uint8 START_OF_HEADER = 1 as Uint8;
我的错误:
类型"int"不是类型强制转换中类型"Uint8"的子类型
我做错了什么?另一件奇怪的事情是,我可以使用这些库编写这行代码,我的IDE将进行编译,并且不会抛出错误,也就是说,直到你使用了这行代码。我正在使用Intellij版本2019.2.4
您正试图在Dart中创建Uint8
的实例,但这是不可能的——该类型只是一个标记。
/// [Uint8] is not constructible in the Dart code and serves purely as marker in
/// type signatures.
例如,您只需在typedefs中使用这些标记来描述一个C函数,它接受两个有符号的32位int并返回有符号的32bit int:
typedef native_sum_func = Int32 Function(Int32 a, Int32 b);
这将与一个等效的类似Dart的typedef 配对
typedef NativeSum = int Function(int a, int b);
Dart-ffi负责将a
和b
从Dart-int转换为32位Cint,并将返回值转换回Dart-int。
请注意,您可以创建指向这些C类型的指针,例如使用package:ffi
中的allocate
方法的Pointer<Uint8>
。