7 个版本
0.2.0 | 2022 年 2 月 26 日 |
---|---|
0.1.5 | 2022 年 2 月 20 日 |
#278 in FFI
45 每月下载次数
3KB
可行的
🐍
通过 Rust 与 C++ MSVC VTables 互操作!
用法
use std::os::raw::c_int;
use viable::vtable;
extern "C" {
fn getMath(i: c_int) -> *mut Math;
}
#[vtable]
struct Math {
internal: c_int,
add: extern "C" fn(a: c_int, b: c_int) -> c_int,
#[offset(1)] // Completely optional
add2: extern "C" fn(a: c_int, b: c_int) -> c_int,
}
pub fn main() {
let iface = unsafe { getMath(10) };
let iface = unsafe { iface.as_mut().unwrap() };
// Yep. Even this works
assert_eq!( iface.internal, 10 );
assert_eq!( iface.add2(5, 5), 5 + 5 + 10 );
}
查看 viable-tests/src/basic.cpp 中的 C++ 源代码。
依赖关系
~1.5MB
~36K SLoC