mod ps { #[repr(C)] #[derive(Debug)] pub struct PowerSocket { power_rate: f32, on: bool, } pub type FnPowerSocketNew = unsafe extern "C" fn(power_rate: f32, on: bool) -> PowerSocket; pub type FnPowerSocketIsOn = unsafe extern "C" fn(power_socket: &PowerSocket) -> bool; pub type FnPowerSocketSetOn = unsafe extern "C" fn(power_socket: &mut PowerSocket, on: bool); pub type FnPowerSocketGetPower = unsafe extern "C" fn(power_socket: &PowerSocket) -> f32; } use ps::*; fn main() { let path = "target/debug/power_socket_lib.dll"; let Ok(lib) = (unsafe { libloading::Library::new(path) }) else { eprintln!("Failed to load lib: {}", path); return; }; let Ok(power_socket_new) = (unsafe { lib.get::("power_socket_new") }) else { eprintln!("Failed to get power_socket_new function from lib: {}", path); return; }; let Ok(power_socket_is_on) = (unsafe { lib.get::("power_socket_is_on") }) else { eprintln!("Failed to get power_socket_is_on function from lib: {}", path); return; }; let Ok(power_socket_set_on) = (unsafe { lib.get::("power_socket_set_on") }) else { eprintln!("Failed to get power_socket_set_on function from lib: {}", path); return; }; let Ok(power_socket_get_power) = (unsafe { lib.get::("power_socket_get_power") }) else { eprintln!("Failed to get power_socket_get_power function from lib: {}", path); return; }; let mut power_socket = unsafe { power_socket_new(12.0, false) }; println!("call power_socket_new -> {:?}", power_socket); println!("call power_socket_is_on -> {:?}", unsafe { power_socket_is_on(&power_socket) }); println!("call power_socket_get_power -> {:?}", unsafe { power_socket_get_power(&power_socket) }); unsafe { power_socket_set_on(&mut power_socket, true) }; println!("call power_socket_set_on(&ref, true)"); println!("call power_socket_is_on -> {:?}", unsafe { power_socket_is_on(&power_socket) }); println!("call power_socket_get_power -> {:?}", unsafe { power_socket_get_power(&power_socket) }); }