8 个版本
0.2.1 | 2022年2月26日 |
---|---|
0.2.0 | 2022年2月26日 |
0.1.5 | 2022年2月20日 |
#15 in #vtable
每月 62 次下载
在 viable 中使用
8KB
113 行
viable
🐍
通过 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
~35K SLoC