rust调用DLL或lib

就随便写写记录下

window上有三种方法:

1.动态调用,代码里通过libloading库

复制代码
STATIC_LIB: Library = unsafe{  Library::new("D:\\xx\\Everything64.dll").expect("Failed to load Everything64.dll")};
let Everything_SetSearch: Symbol<unsafe extern "C" fn(*const c_char)> = lib.get(b"Everything_SetSearchA").unwrap();
let Everything_CleanUp: Symbol<unsafe extern "C" fn()> = lib.get(b"Everything_CleanUp").unwrap();
Everything_SetSearch(x.as_ptr());

2.通过rust ffi引用

复制代码
#[link(name = "Everythingx",kind = "static")]
extern "C" {
    fn Everything_SetSearchA(lp_string: *const c_char);
}

需要将dll放在exe目录下或者工程目录下

3.有源码情况下使用cc编译,build.rs

复制代码
let opt_level = env::var("OPT_LEVEL").unwrap_or_else(|_| "0".to_string());
cc::Build::new()
    .opt_level(opt_level.parse().unwrap())
    .file("D:\\xx\\Everything.c")
    .include("D:\\xx\\include")
    .include("D:\\xx\\ipc")
    .include("C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.18362.0\\um")
   // .out_dir("./")
    .compile("Everythingx");

可能需要添加额外依赖

通过println!("cargo:rustc-link-lib=shell32");指定

相关推荐
淼淼7637 分钟前
Qt调度 程序
开发语言·c++·windows·qt
智算菩萨8 分钟前
【实战】使用讯飞星火API和Python构建一套文本摘要UI程序
开发语言·python·ui
前端不太难11 分钟前
如何给 RN 项目设计「不会失控」的导航分层模型
前端·javascript·架构
用户40993225021215 分钟前
Vue3中v-show如何通过CSS修改display属性控制条件显示?与v-if的应用场景该如何区分?
前端·javascript·vue.js
Zyx200716 分钟前
JavaScript 中 this 的设计哲学与运行机制
javascript
A242073493018 分钟前
JavaScript图表制作:从入门到精通
开发语言·javascript·信息可视化
瘦的可以下饭了24 分钟前
Day03-APIs
javascript
BD_Marathon29 分钟前
Vue3_简介和快速体验
开发语言·javascript·ecmascript
写代码的皮筏艇33 分钟前
数组 forEach
前端·javascript
tryxr1 小时前
Java 多线程标志位的使用
java·开发语言·volatile·内存可见性·标志位