homework done

This commit is contained in:
32 changed files with 187 additions and 1731 deletions

View File

@@ -0,0 +1,7 @@
[package]
name = "use_dynamic"
version = "0.1.0"
edition = "2024"
[dependencies]
libloading = "0.9.0"

View File

@@ -0,0 +1,51 @@
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::<FnPowerSocketNew>("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::<FnPowerSocketIsOn>("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::<FnPowerSocketSetOn>("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::<FnPowerSocketGetPower>("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) });
}