| #![crate_type = "cdylib"] | |
| #[no_mangle] | |
| pub extern "C" fn extern_fn_1(a: u32, b: u32) -> u32 { | |
| println!("extern_fn_1"); | |
| a + b | |
| } | |
| #[derive(Default)] | |
| struct NotifyOnDrop { | |
| last_result: std::cell::Cell<u32>, | |
| } | |
| impl NotifyOnDrop { | |
| fn save_and_print(&self, result: u32) { | |
| self.last_result.set(result); | |
| } | |
| } | |
| impl Drop for NotifyOnDrop { | |
| fn drop(&mut self) { | |
| println!("dropping, last result: {}", self.last_result.get()); | |
| } | |
| } | |
| thread_local! { | |
| static FOO: NotifyOnDrop = NotifyOnDrop::default(); | |
| } | |
| #[no_mangle] | |
| pub extern "C" fn extern_fn_2(a: u32, b: u32) -> u32 { | |
| let result = a * b; | |
| FOO.with(|foo| { | |
| foo.save_and_print(result); | |
| }); | |
| println!("extern_fn_2({a}, {b})"); | |
| result | |
| } |