#vtable #cpp #virtual #api-bindings

可行的

通过 Rust 与 C++ MSVC VTables 互操作!如果有一段时间没有使用,您可以发消息询问名称

7 个版本

0.2.0 2022 年 2 月 26 日
0.1.5 2022 年 2 月 20 日

#278 in FFI

45 每月下载次数

MIT 许可证

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