使用rusty-cheddar在C中生成不透明指针

时间:2017-11-17 21:06:28

标签: c rust ffi

我正在尝试使用rusty-cheddar crate为Rust编写的库生成C头文件。

以下是Rust中结构的定义和实现:

pub struct AccountDatabase {
    money: HashMap<String, u32>,
}

impl AccountDatabase {
    fn new() -> AccountDatabase {
        AccountDatabase {
            money: HashMap::new(),
        }
    }
}

如果我在结构之前放置#[repr(C)],那么rusty-cheddar会在C中生成以下结构声明

typedef struct AccountDatabase {
    HashMap money;
} AccountDatabase;

C不知道HashMap,因此我希望将结构声明为不透明指针。

1 个答案:

答案 0 :(得分:3)

解决方案在readme文件中指定:

  

要定义不透明的结构,您必须定义一个标记为#[repr(C)]的公共新类型。

因此:

struct AccountDatabase {
    money: HashMap<String, u32>,
}

impl AccountDatabase {
    fn new() -> AccountDatabase {
        AccountDatabase {
            money: HashMap::new()
        }
    }
}

#[repr(C)]
pub struct Crate_AccountDatabase(AccountDatabase);

(或者您选择的其他结构命名)