#vtable #cpp #virtual #viable #api-bindings

viable-impl

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

8 个版本

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

#15 in #vtable

Download history 37/week @ 2024-03-12 11/week @ 2024-03-19 1/week @ 2024-03-26 24/week @ 2024-04-02 1/week @ 2024-04-16 7/week @ 2024-04-23 1/week @ 2024-04-30 16/week @ 2024-05-21 23/week @ 2024-05-28 2/week @ 2024-06-04 48/week @ 2024-06-11 9/week @ 2024-06-18 3/week @ 2024-06-25

每月 62 次下载
viable 中使用

MIT 许可证

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