Macro crossdylib::crossdylib [−][src]
macro_rules! crossdylib {
{
$($(#[$attr : meta]) * $vis : vis static $ident : ident : $ty : ty = $expr
: expr ;) +
} => { ... };
}Expand description
Creates CrossDylibs.
CrossDylibs must be synchronized using the CrossDylib::sync function before use.
Panics
CrossDylibs will panic if accessed before CrossDylib::sync is called in debug mode.
In release mode this will lead to undefined behaviour.
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");
}