在Rust中,为什么“extern”系统“与macOS上的`extern”C“`兼容?

时间:2017-05-19 21:51:52

标签: rust

我正在尝试包装一个使用回调的C库,它们需要不同的调用约定,具体取决于操作系统。

在Windows上,他们需要stdcall(如果是x64,则为C)。在Linux和macOS上,它们必须是C

我使用bindgen生成绑定,但我也希望将该层包装在隐藏回调的另一层中。我认为以下内容应该有效:

extern "system" .........

但是我遇到了这些错误(目前在macOS上):

E0308: mismatched types
  label: expected "C" fn, found "system" fn
  note: expected type `extern "C" fn(*mut ...

我想分享所有平台的包装层。我是否需要复制包装层或使用宏? extern "system"应该有效吗?这是一个错误吗?

编辑:

我最后写了一个解决方法:https://crates.io/crates/extern_attrib

0 个答案:

没有答案