我正在编写一个 Rust 程序,它从 C DLL 动态加载一些函数。我编写了一个辅助结构来加载它们:
// some function pointer definitions
// type func1_ptr = unsafe extern "C" func1() -> ();
// .....
pub struct FuncWrapper {
pub func1: func1_type,
}
impl FuncWrapper {
pub fn new() -> Self {
Self {
func1: unsafe { mem::transmute(load_function(lib, "func1")) },
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于要加载 100 多个函数,我编写了一个宏来完成这些脏活:
use paste::paste;
macro_rules! define_load_functions {
($v:vis $name:ident { $($func_name:ident),* $(,)?}) => {
paste! {
$v struct $name {
$(
pub $func_name: [<$func_name _ptr>],
)*
}
impl …Run Code Online (Sandbox Code Playgroud)