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 在 操作系统
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