【发布时间】:2021-06-17 16:39:32
【问题描述】:
我正在制作一个使用 FFI 与 Rust 代码交互的 Dart 库,我有一些问题。
我找不到任何有关本机互操作行为的官方信息,而且我一直只通过 other examples 和 Dart SDK code 指导。
例如,Dart FFI 不直接映射bool 类型,而是使用Int8。我也不知道如果类型的大小不匹配会发生什么。有没有解释这些“规则”的文档?
【问题讨论】:
-
据我回忆,FFI 使用 C 的标准调用约定,即“规则”。如果类型的大小不匹配,您可能正在访问您不应该访问的内存,这将导致分段错误。
-
这是否记录在某处?
-
我评论的哪一部分?
-
全部。调用约定是 C 和大小。不要误会我的意思,我只是想了解更多相关信息,但我找不到那么多官方/经过验证的信息。
-
有大量关于调用约定的 C 标准的资源,可以通过谷歌快速搜索。 Microsoft 将 following 用于 x64。一旦您对调用约定有所了解,就应该清楚使用不正确大小的参数会如何产生问题。