小编Use*_*ser的帖子

将 Rust trait 传递给 C

我正在构建一个需要使用 Rust 对象调用一些 C 函数的 Rust 库。我有一个调用 C 函数的函数的特征,C 函数在 Rust 中定义如下:

extern {
    fn process_trait(my_trait: MyTrait);
}
Run Code Online (Sandbox Code Playgroud)

这个想法是,用户可以为他的结构实现 trait,然后调用 C 函数(基本上,C 然后调用其他一些 Rust,它调用一些 Trait 函数)。这里的错误是:the trait core::marker::Sized is not implemented for the type Self,因为我正在传递*self给 process_trait。难道我做错了什么?我尝试稍微改变一下,即使是铸造,我得到这个错误或错误的类型。

我认为问题在于它应该是堆分配的,不是吗?我唯一要避免的是 API 看起来很丑。用户应该能够

struct MyUnit;
impl MyTrait for MyUnit...
MyUnit.callC();
Run Code Online (Sandbox Code Playgroud)

c ffi rust

5
推荐指数
1
解决办法
1153
查看次数

标签 统计

c ×1

ffi ×1

rust ×1