#dll #load #dlopen #shared #so

libloader

基于libloading的简单易用的Rust DLL加载器

5个版本

0.1.4 2022年9月12日
0.1.3 2022年9月12日
0.1.2 2022年9月12日
0.1.1 2022年9月12日
0.1.0 2022年9月12日

#532操作系统

Download history • Rust 包仓库 104/week @ 2024-03-12 • Rust 包仓库 55/week @ 2024-03-19 • Rust 包仓库 28/week @ 2024-03-26 • Rust 包仓库 51/week @ 2024-04-02 • Rust 包仓库 83/week @ 2024-04-09 • Rust 包仓库 107/week @ 2024-04-16 • Rust 包仓库 68/week @ 2024-04-23 • Rust 包仓库 54/week @ 2024-04-30 • Rust 包仓库 38/week @ 2024-05-07 • Rust 包仓库 17/week @ 2024-05-14 • Rust 包仓库 33/week @ 2024-05-21 • Rust 包仓库 25/week @ 2024-05-28 • Rust 包仓库 58/week @ 2024-06-04 • Rust 包仓库 91/week @ 2024-06-11 • Rust 包仓库 55/week @ 2024-06-18 • Rust 包仓库 3/week @ 2024-06-25 • Rust 包仓库

212 每月下载量
2 crates 中使用

自定义许可证

445KB

包含 (Mach-o库,440KB) libstd.dylib

libloader

libloader是一个基于libloading的简单易用的Rust DLL加载器

它非常容易动态调用动态链接库(Windows的DLL文件,Unix/Linux的so文件,macOS的dylib文件)中的函数

使用此函数从DLL获取函数

get_libfn!(
    "path.dll",
    "func_name",
    name_to_call,
    return_type, // ifreturn type is none, use "()" instead
    param1_name: param1_type
    param2_name: param2_type
    param3_name: param3_type
    ...
);

例如,我们有以下来自libstd.dylib的函数

// lib.rs (compiled into libstd.dylib)
#[no_mangle]
pub fn println(str: &str) {
    println!("{}", str);
}

#[no_mangle]
pub fn add(a: usize, b: usize) -> usize {
    a + b
}

#[no_mangle]
pub fn print_hello() {
    println!("Hello");
}

我们可以这样调用它

// main.rs
use libloader::libloading
fn main() {
    get_libfn!("libstd.dylib", "println", my_println, (), str: &str);
    my_println("Hello World");

    get_libfn!("libstd.dylib", "add", my_add, usize, a: usize, b: usize);
    println!("10 + 20 = {}", my_add(10, 20));

    get_libfn!("libstd.dylib", "print_hello", my_print_hello, ());
    my_print_hello();
}

输出是

Hello World
10 + 20 = 30
hello

依赖