#shared-state #shared #module #state #dylib #cdylib

crossdylib

跨平台共享库/模块之间的共享状态

7 个稳定版本

3.0.0 2021年12月4日
2.1.0 2021年11月29日
2.0.0 2021年11月28日
1.1.0 2021年11月28日
1.0.2 2021年11月28日

#338 in FFI

MIT 许可证

11KB
154 代码行

crossdylib

此库可用于在共享库/模块之间实现共享状态。

支持

支持的平台

  • Windows
  • Linux

示例

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

依赖

~0.5–7MB
~26K SLoC