viable

Crates.ioviable
lib.rsviable
version0.2.0
sourcesrc
created_at2022-02-02 07:28:55.259384
updated_at2022-02-26 01:31:48.545435
descriptionInterop with C++ MSVC VTables through Rust! If this hasn't been used for a while, you can message me for the name.
homepage
repositoryhttps://github.com/Vurv78/viable
max_upload_size
id525580
size1,847
Vurv (Vurv78)

documentation

README

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.

Commit count: 15

cargo fmt