0

我正在玩winapi crate,但在我看来,它并没有为 Windows API 添加安全性——它似乎只是提供类型和签名,并允许我们以几乎相同的不安全范式进行编程,但使用 Rust句法。

例如,是否有可能在 Rust FFI 中进一步细分原生类型以编码隐式生命周期信息,以便 winapi 编程实际上更安全?当 winapi 分配给必须通过某些调用释放/释放的指针或句柄时,我们可以Drop为该值附加正确的行为吗?Rust 是否足够富有表现力?

当然,我们可以使用在调用者和 winapi 之间映射的更安全的对象来完全包装 winapi 调用,但这会在复制/映射期间导致运行时命中,这并不好玩。

(也许很清楚,但我对 Rust 和 WinApi 甚至原生编程都是新手。)

我意识到通常必须将字符串数据转换为 Rust 的 UTF-8。但是我想知道是否有可能自动将本机字符串包装在一个记忆结构中,其中字符串不会被转换为 UTF-8(透明地),除非在 Rust 代码中需要它(而不是作为相同的格式)。

句柄和指针虽然不需要任何转换,但它们只需要正确的生命周期。但是有很多种指针和多种句柄,这些类型差异应该在 Rust 中保留。但是然后用特征 impl 对特定于库的 free() 进行编码,Drop我认为会有很多排列,然后我们需要对其他不关心谁分配它的 winapi 函数进行重载。正确的?

4

0 回答 0