我正在尝试使用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
,因此我希望将结构声明为不透明指针。
答案 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);
(或者您选择的其他结构命名)