1 个不稳定版本
使用旧的Rust 2015
0.1.0 | 2016年11月21日 |
---|
#11 在 #msvc
2MB
139 行
包含 (静态库,1MB) src/test_dll.dll.lib,(Windows DLL,725KB) src/test_dll.dll
dynlib
为Rust MSVC提供的简单Microsoft DLL加载器绑定
将以下内容包含到您的项目中
[dependencies]
dynlib = "0.0.1"
此crate只能在Rust MSVC外部使用。请注意。
此提供对Windows平台上的LoadLibraryExA
接口的简单抽象。此crate功能的一个非常简单的示例
use dynlib::{VoidPtr,LoadWinDynLib,DynLibWin};
let lib: DynLibWin = LoadWinDynLib::new()
.search_application_dir()
.load("test_dll.dll")?;
let func: VoidPtr = lib.load_function("addition")?;
let callable: extern "Rust" fn(u64,u64)->u64 = unsafe{ mem::transmute(func)};
assert_eq( callable(5u64,5u64), 10u64);
需要不安全代码来强制转换函数指针。当DynLibWin
类型被丢弃时,它不会卸载其模块。它必须手动释放。当你释放DynLibWin
时,从它拉取的所有函数都将无效,并从内存中释放。因此调用它们会导致内存段错误,并可能导致你的应用程序崩溃。
我只是觉得让DLL在应用程序的生命周期内存在是一个更安全的替代方案。加载的DLL内存是在进程间共享的,所以这里没有节省内存的论点。