最近需要使用Rust动态调用动态链接库,本来打算是使用libloading的,但是libloading在调用dll中的函数的时,是必须要在编译时确定参数和return的类型的。但后来发现了libloader这个包包,
最近需要使用Rust动态调用动态链接库,本来打算是使用libloading的,但是libloading在调用dll中的函数的时,是必须要在编译时确定参数和return的类型的。但后来发现了libloader这个包包,libloader是基于libloading的,但是操作起来却比libloader方便。 我们先需要一个动态链接库,我们可以使用cargo create project-name --lib创建一个动态链接库的项目,然后修改lib.rs后使用cargo build编译,我写了三种类型的函数
然后再用cargo create project-name --bin创建一个使用dll的项目 我们把编译出的动态链接库复制到新项目的根目录,我的链接库的名称是libstd.dylib,.dylib是macOS编译出的链接库,如果你使用的是Linux或者Windows,则后缀名会是.so和.dll 然后我们需要安装libloader的依赖,我们在Cargo.toml中的[dependencies]下添加libloader: "0.1.4"
目前的最新版本是0.1.4,建议使用最新版本,最新版本可以在这里查看:libloader - crates.io: Rust Package Registry main.rs 代码
然后我们需要获取动态链接库中的函数,其中每个参数的作用已经在代码的注释标识了,值得注意的是,如果函数没有返回值,则可以用()代替。
下一步我们可以直接调用之前传给get_libfn的"调用的名字"
其它函数也是一样,完整代码为:
导航: libloader的crates.io: libloader - crates.io: Rust Package Registry https://crates.io/crates/libloader libloader的Github: Qixinies/libloader: A easy-to-use dll loader for rust that based on libloading (github.com) https://github.com/Qixinies/libloader |
2022-04-23
2022-10-16
2022-08-26
2020-04-20
2021-01-20