如何在飞镖 FFI 中使用布尔类型?



我正在尝试将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类型。

最新更新