我已经使用 rust-bindgen 来生成 rust 接口代码。
现在在 C 代码中,您可以找到以下内容:
extern const struct mps_key_s _mps_key_ARGS_END;
#define MPS_KEY_ARGS_END (&_mps_key_ARGS_END)
请注意,在孔中其余代码_mps_key_ARGS_END
不会再次出现。
宏 MPS_KEY_ARGS_END 经常在其他 simular中使用mps_key_s
。
现在 rust-bindgen 生成的代码是这样的:
pub static _mps_key_ARGS_END: Struct_mps_key_s;
现在在 C 代码中,这是一个示例用法:
extern void _mps_args_set_key(mps_arg_s args[MPS_ARGS_MAX], unsigned i,
mps_key_t key);
_mps_args_set_key(args, 0, MPS_KEY_ARGS_END);
在 rust 中,它看起来像这样:
pub fn _mps_args_set_key(args: [mps_arg_s, ..32u], i: ::libc::c_uint,
key: mps_key_t);
现在我试着这样称呼它:
_mps_args_set_key(args, 0 as u32, _mps_key_ARGS_END );
但我得到一个错误:
错误:不匹配的类型:预期
*const Struct_mps_key_s
,找到Struct_mps_key_s
(预期 *-ptr,找到枚举 Struct_mps_key_s)
我不是一个优秀的 C 程序员,我什至不明白这些 C 静态甚至从哪里获得值。
谢谢你的帮助。
编辑:
根据 Chris Morgan 的回答进行更新。
我添加了这段代码(注意,我用 mps_key_t 替换了 *const mps_key_s):
pub static MPS_KEY_ARGS_END: mps_key_t = &_mps_key_ARGS_END;
只是关于我为什么mps_key_t
在 C 中使用 , 的一些额外信息:
typedef const struct mps_key_s *mps_key_t;
生锈:
pub type mps_key_t = *const Struct_mps_key_s;
这个接缝接缝比以前更好,但现在我遇到了严重的崩溃:
错误:内部编译器错误:意外失败注意:编译器遇到了意外的失败路径。这是一个错误。注意:我们将不胜感激错误报告: http ://doc.rust-lang.org/complement-bugreport.html注意:运行
RUST_BACKTRACE=1
回溯任务“rustc”在“预期项目”失败,发现外部项目_mps_key_ARGS_END::_mps_key_ARGS_END (id=1102)', /home/rustbuild/src/rust-buildbot/slave/nightly-linux/build/src/libsyntax/ast_map/mod.rs:327