我正在尝试将Dart FFI与Rust一起使用。但是我找不到有关如何在 FFI 中使用 c 兼容布尔值的任何提及/文档/示例。甚至 Dart 官方文档中的基元示例也没有提到布尔值。在 FFI 中不可能使用布尔值吗?如果没有,我该如何正确使用它们?
我刚刚发现 Dart 的 FFI 库还不支持布尔类型,(或者我不确定它们不会(。 但是由于 Rust 的bool
类型与 C 的 _Bool 类型大小相同,我们可以在 Rust 中使用bool
,并在 Dart 中作为 FFI 类型传递Int32
。
0将变为假,1表示真。我认为这与在 Rust 中将 i32 转换为布尔值的结果相同。
锈实现,
pub extern "C" fn some_function(arg: bool) {}
和 Dart 中的类型定义,
typedef some_function = ffi.Void Function(ffi.Int32);
只是为了补充接受的答案(还不能评论(,尽管它通过将bool
值修改为ints
来工作,但相反的方式在我的情况下引起了问题。
pub extern "C" fn some_function() -> bool
(达特(
typedef some_function = ffi.Int32 Function();
为了将其转换为bool
我必须用1
做一个位掩码,以便只得到第一个位,然后看看它是否等于零。
我不确定我是否正在读取无效内存,或者它之前是否未清除。
在飞镖 2.10.4 中观察到
编辑
如 Dart SDK 本身所示,它们将布尔值映射到Int8
类型。