language = "C"
cbindgen --config cbindgen.toml --crate example_03 --output example_03_header.h
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include 文件,这是 cbindgen 工具的默认行为,它会默认导入这些 C/C++ 标准库。我们如果不需要导入这些库时,可以通过增加以下配置内容:no_includes = true
capi_,可以在 cbindgen.toml 增加以下配置:[export]
prefix = "capi_"
#[repr(C)]
#[derive(Debug)]
pub enum gender {
BOY,
GIRL,
}
#[no_mangle]
pub extern "C" fn student_alice() -> *mut student {
let mut init_char_array: [c_char; 20] = [0; 20];
for (dest, src) in init_char_array.iter_mut().zip(b"Alice\0".iter()) {
*dest = *src as _;
}
let scores = [92.5, 87.5, 90.0];
let alice = student {
num: 1 as c_int,
total: 280,
name: init_char_array,
scores,
gender: gender::GIRL,
};
Box::into_raw(Box::new(alice))
}
typedef enum {
BOY,
GIRL,
} capi_gender;
[enum]
rename_variants = "SnakeCase"
# possible values (that actually do something):
# * "CamelCase": MyVariant => myVariant
# * "SnakeCase": MyVariant => my_variant
# * "ScreamingSnakeCase": MyVariant => MY_VARIANT
# * "QualifiedScreamingSnakeCase": MyVariant => ENUM_NAME_MY_VARIANT
# * "LowerCase": MyVariant => myvariant
# * "UpperCase": MyVariant => MYVARIANT
# * "None": apply no renaming
typedef enum {
boy,
girl,
} capi_gender;
原文作者:Rust语言中文社区;如有侵权,请联系管理员删除。