如何使用FFI从C调用Rust结构的方法?

时间:2019-01-12 03:16:58

标签: c rust ffi

我正在尝试使用FFI从C程序调用公共函数(位于Rust结构的impl块内)。调用常规pub fn并不太麻烦,但是我试图从pub fn的{​​{1}}块内部调用struct,但找不到正确的语法公开/调用它。当然可以,对吗?

lib.rs

impl

main.c

#[repr(C)]
#[derive(Debug)]
pub struct MyStruct {
    var: i32,
}

#[no_mangle]
pub extern "C" fn new() -> MyStruct {
    MyStruct { var: 99 }
}

#[no_mangle]
impl MyStruct {
    #[no_mangle]
    pub extern "C" fn print_hellow(&self) {
        println!("{}", self.var);
    }
}

1 个答案:

答案 0 :(得分:2)

否,这是不可能的。您将需要为每个要访问的方法编写填充程序功能:

#[no_mangle]
pub unsafe extern "C" fn my_struct_print_hellow(me: *const MyStruct) {
    let me = &*me;
    me.print_hellow();
}

另请参阅: