crossdylib 1.0.0

Cross-platform shared state across shared libraries/modules
Documentation

crossdylib

This library can be used to achieve shared state across shared libraries/modules.

Support

Supported platforms

  • Windows
  • Linux

Example

a.dll

#[macro_use] extern crate crossdylib;

crossdylib! {
static THE_ANSWER: std::sync::Mutex<u32> = std::sync::Mutex::new(39);
}

#[no_mangle]
pub unsafe extern "C" fn increment() {
THE_ANSWER.sync().unwrap();

let mut lock = THE_ANSWER.lock().unwrap();
*lock += 1;
assert_eq!(*lock, 40);
}

b.dll

#[macro_use] extern crate crossdylib;

crossdylib! {
static THE_ANSWER: std::sync::Mutex<u32> = std::sync::Mutex::new(39);
}

#[no_mangle]
pub unsafe extern "C" fn increment() {
THE_ANSWER.sync().unwrap();

let mut lock = THE_ANSWER.lock().unwrap();
*lock += 1;
assert_eq!(*lock, 41);
}

main.exe

fn main() {
let a = Library::new("a.dll").unwrap();
a.get::<extern "C" fn()>("increment").unwrap()();

let b = Library::new("b.dll").unwrap();
b.get::<extern "C" fn()>("increment").unwrap()();

println!("Success");
}