#dynamic #load #shared #library

snek

一个用于使用动态库的简单库和宏

6 个版本

使用旧的 Rust 2015

0.3.0 2016年3月18日
0.2.0 2016年2月18日
0.1.3 2016年2月18日

#175#load

Apache-2.0

18KB
199

Snek

Snek 是一个简单的 Rust 库,用于定义接口并加载动态库。

目前不稳定,不建议您将其用于生产代码。

现在支持 Windows!

有关更多信息,请查看此处的文档或通过 cargo doc

待办事项

  • 适当的错误处理
  • 更多?

lib.rs:

此库提供了一个方便的接口,用于在运行时加载动态库并从中检索符号。推荐使用 snek! 宏,它定义了一个结构,在构造时加载符号并具有针对每个符号的方法,但是也可以使用 Snek 实例手动加载库和符号。

安全性

无法验证加载的符号的类型,因此使用这两种方法都假设给定的类型是正确的 - 应非常小心地使用此库。请考虑目前所有内容都非常不稳定。

示例

#[macro_use] extern crate snek;
extern crate libc;

use libc::c_int;

snek! {
    Example {
        hello: () -> (),
        add: (x: c_int, y: c_int) -> c_int
    }
}

fn main() {
    if let Ok(example) = Example::load("libexample.so") {
        unsafe { example.hello() };
        println!("2 + 4 = {}", unsafe { example.add(2, 4) });
    }
}

依赖项

~115KB