据我所知,sdl2_sys是一个为所有SDL2自动生成的绑定的箱子,而sdl2是一个基于sdl2_sys的绑定的箱子,它缺少某些函数的等效项,特别是
IMG_LoadSVG_RW
。
我看到一些消息来源说 sdl2 是 SDL2 的安全包装器(这里),但我还没有看到有人对 sdl2_sys 说同样的话。 当使用
sdl2_sys中的函数时,我必须写很多
unsafe
,我不喜欢这样,因为这意味着不再保证我写的内容是安全的。
sdl2_sys 的另一个问题是函数有时会返回 c 类型(到目前为止我只需要处理 *c_char 但我确信还有更多),这很难转换回来。
最后,到目前为止我找到的每个教程都是针对 sdl2 的,所以找出到底如何做某事总是比较困难。
我需要使用
IMG_LoadSVG_RW
,所以很明显我必须以某种方式使用sdl2_sys,但我想知道在我无法使用sdl2的地方只使用sdl2_sys是否更好并处理导致的问题,或者使用 sdl2_sys 来处理所有事情,但体验会明显更差。
一般来说,
*_sys
板条箱包含(通常自动生成)与相关库的 C API 的一对一绑定、一些链接到库的 Rust 设置,仅此而已。主要的非 sys
板条箱为库提供了内存安全且符合人体工程学的界面,使用 sys
板条箱中的绑定编写。
通常不建议直接使用
sys
板条箱 - 您也可以只编写 C。然而,非 sys
板条箱中的安全绑定是由第三方编写的,他们可能无法安全地绑定每一个位库中的功能,因此它们可能缺乏。