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

macro viable-impl

Interop with C++ MSVC VTables through Rust! If this hasn't been used for a while, you can message me for the name

8 releases

0.2.1 Feb 26, 2022
0.2.0 Feb 26, 2022
0.1.5 Feb 20, 2022

#16 in #vtable

31 downloads per month
Used in viable

MIT license

8KB
113 lines

viable 🐍

Interop with C++ MSVC VTables through Rust!

Usage

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 );
}

See viable-tests/src/basic.cpp for C++ source.

Dependencies

~1.5MB
~36K SLoC