5个版本 (3个破坏性更新)
0.10.0 | 2024年1月17日 |
---|---|
0.9.1 | 2023年11月18日 |
0.8.0 | 2023年10月30日 |
0.7.0 | 2023年7月12日 |
在 操作系统 类别中排名第 147
每月下载量 94 次
52KB
1.5K SLoC
Dylink
Dylink 为动态库的加载提供了一个运行时动态链接框架。
如果您加载的动态库并不总是保证存在,这个crate可能非常有用,这可以让您在代码中提供回退方案。
相关链接
功能
- 线程安全库加载。
- 宏属性
支持的平台
适用于所有主要平台。
Windows | Linux | MacOS |
---|---|---|
是 | 是 | 是 |
使用方法
将以下内容添加到您的 Cargo.toml
[dependencies]
dylink = "0.9"
示例
以下是在Windows上通过 Library
手动打开库的示例。
use dylink::*;
use std::mem;
// Open the Kernel32.dll library.
let lib = Library::open("Kernel32.dll").expect("Failed to open library");
// Get the symbol for the GetLastError function.
let sym = lib.symbol("GetLastError").unwrap();
// Cast the symbol to the appropriate function signature.
let get_last_error: unsafe extern "system" fn() -> u32 = unsafe {mem::transmute(sym)};
let result = unsafe {get_last_error()};
// Call the function and assert its return value.
assert_eq!(result, 0);
以下是在Windows上使用 dylink
属性的示例。此示例通过与Kernel32.dll库中的函数交互,演示了 dylink
crate的懒加载功能。
use dylink::*;
// Define a static LibLock for the Kernel32.dll library.
static KERNEL32: sync::LibLock = sync::LibLock::new(&["Kernel32.dll"]);
// Use the `dylink` attribute to declare functions from the Kernel32.dll.
#[dylink(library=KERNEL32)]
extern "system-unwind" {
fn GetLastError() -> u32;
fn SetLastError(_: u32);
}
// Use the declared functions, which will be loaded lazily when called.
unsafe {
SetLastError(52);
assert_eq!(52, GetLastError());
}
许可证
许可协议为以下之一
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在作品中的任何贡献,将按上述方式双许可,不附加任何其他条款或条件。
依赖项
~255–700KB
~17K SLoC