【问题标题】:Dart FFI type mappingsDart FFI 类型映射
【发布时间】:2021-06-17 16:39:32
【问题描述】:

我正在制作一个使用 FFI 与 Rust 代码交互的 Dart 库,我有一些问题。

我找不到任何有关本机互操作行为的官方信息,而且我一直只通过 other examplesDart SDK code 指导。

例如,Dart FFI 不直接映射bool 类型,而是使用Int8。我也不知道如果类型的大小不匹配会发生什么。有没有解释这些“规则”的文档?

【问题讨论】:

  • 据我回忆,FFI 使用 C 的标准调用约定,即“规则”。如果类型的大小不匹配,您可能正在访问您不应该访问的内存,这将导致分段错误。
  • 这是否记录在某处?
  • 我评论的哪一部分?
  • 全部。调用约定是 C 和大小。不要误会我的意思,我只是想了解更多相关信息,但我找不到那么多官方/经过验证的信息。
  • 有大量关于调用约定的 C 标准的资源,可以通过谷歌快速搜索。 Microsoft 将 following 用于 x64。一旦您对调用约定有所了解,就应该清楚使用不正确大小的参数会如何产生问题。

标签: dart rust ffi


【解决方案1】:

master branch 支持布尔类型。它在 2.15 测试版中通过 2.15.0-233.0.dev 在 dev 上提供,并将成为 2.15 稳定版本的一部分。

至于尺寸。您可以尝试generating a C header file from your Rust API,然后使用package:ffigen 生成 Dart 绑定。​​

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    相关资源
    最近更新 更多