homework done
This commit is contained in:
7
smart-house/use_dynamic/Cargo.toml
Normal file
7
smart-house/use_dynamic/Cargo.toml
Normal file
@@ -0,0 +1,7 @@
|
||||
[package]
|
||||
name = "use_dynamic"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
libloading = "0.9.0"
|
||||
51
smart-house/use_dynamic/src/main.rs
Normal file
51
smart-house/use_dynamic/src/main.rs
Normal 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) });
|
||||
}
|
||||
Reference in New Issue
Block a user