How to Handle Callbacks Across FFI in Rust

Define an extern function pointer type, implement the callback with unsafe extern C, and pass it to foreign code.

Handle callbacks across FFI in Rust by defining a extern function pointer type in Rust, passing it to the foreign code, and invoking it via unsafe blocks while ensuring the foreign side respects Rust's calling conventions.

// Define the callback type matching the foreign signature
pub type CallbackFn = unsafe extern "C" fn(arg1: i32, arg2: i32) -> i32;

// Define the Rust callback implementation
unsafe extern "C" fn my_callback(a: i32, b: i32) -> i32 {
    a + b
}

// Pass the callback to foreign code (example)
extern "C" {
    fn foreign_function(callback: CallbackFn);
}

pub fn call_foreign() {
    unsafe {
        foreign_function(my_callback);
    }
}