#language #generation #automatic #calling #bindings #signature #marshaled

ffigen

自动生成用于从其他语言调用Rust的FFI绑定

1 个不稳定版本

使用旧Rust 2015

0.0.1 2015年9月11日

#40 in #calling

45KB
1K SLoC

ffigen

Build Status

自动生成用于从其他语言调用Rust的FFI绑定。

注意,这个库目前还在开发中,尚未准备好用于生产环境。

概述

这个库允许自动生成调用Rust所需的C FFI桩代码。使用代码生成和与build.rs的集成,您可以确保所有函数签名正确,并且值被正确地打包。

使用

任何标记为

#[no_mangle]  
pub extern ...

的Rust函数都将导出为对应语言的桩代码。注意,如果您使用String、&String或&str,您需要在lib.rs/main.rs中包含"ffigen"模块。这是为了适当的字符串打包代码。

以下是build.rs的模板,当调用"cargo build"时将自动生成代码

extern crate ffigen;  
  
fn main() {  
    let mut context = ffigen::Context::new();  
  
    context.add_lang(ffigen::Lang::Cpp, &[ffigen::Config::Output("path_to_cpp_source".to_string())]);  
    ffigen::gen(&context);  
}

将以下行添加到Cargo.toml中,将调用构建脚本

[package]
...
build="build.rs"

有关所有语言和配置选项,请参阅lib.rs。

后续将提供更详细的入门指南。

支持的语言

目前支持以下语言

  • C#
  • C++ (仅在win32上动态支持)

未来还将支持其他语言。

不支持的数据类型

当前FFI不会导出以下参数/返回类型

  • 结构体
  • 枚举
  • 数组
  • 指针

依赖项

~4.5MB
~95K SLoC