#stack #move #bindings #no-std

no-std repr_c_wrapper

不可见的 #[repr(C)] 包装器,可以通过FFI按值传递

2个版本

0.1.1 2023年7月11日
0.1.0 2023年7月10日

#206 in FFI

MIT/Apache

8KB
96

不可见的 #[repr(Rust)] 包装器,为可以通过FFI按值传递的 #[repr(Rust)] 类型

重要 只有需要8字节对齐或更小的类型可以包装,并且C环境必须将uint64_t对齐到至少8字节边界。

use repr_c_wrapper::*;

#[repr(C)]
pub struct OpaqueWrapper(repr_c_wrapper_t!(String));

#[no_mangle]
pub extern "C" fn some_func() -> OpaqueWrapper {
   OpaqueWrapper("hello".to_string().into())
}

感谢 感谢 @QuineDot@H2CO3@bruecki 在此crate早期草稿中识别出不合理的实践。

无运行时依赖