首先,向Rust指出您想要创建一个对C可见的函数:
#[no_mangle]
pub extern "C" fn some_func() { ... }
这告诉Rust避免损坏输出符号并使用C ABI.
接下来,在跨越边界时,需要使用C兼容的类型.以下是一些对我有用的建议:
Box<T>
返回,并将其作为&T
或Box<T>
.本质上,这意味着你放弃了Rust中 struct 的所有权,并将所有权赋予了C代码.C代码必须确保,如果它将指针传递回一个接受一个框的函数,它将返回no longer uses it.&str
和&[T]
表示为raw::Slice,而Vec<T>
表示为raw::Vec.