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");指定

相关推荐
总要学点什么15 分钟前
第108篇:三维特效-图片轨迹线效果——把贴图滚成一串箭头,想用它的本色反而整条消失
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
小厨勺子4 小时前
我用AIUI给Rokid眼镜做了个随身换算智能体
javascript
鶴哥只手遮天4 小时前
《rustc 内幕》第 1 章 全景:rustc 编译流水线与 crate 版图
后端·rust·开源
starzy19905 小时前
深入理解Scala隐式值:编译期自动装配
开发语言·后端·scala
布莱克6055 小时前
Swift 条件语句详解:从 if 到 switch 的完整指南
开发语言·ssh·swift·switch·条件语句·guard·if
夕水5 小时前
我用trae重构了ew-color-picker,一个插件化架构的现代颜色选择器
前端·javascript·开源
吴可可1235 小时前
ActiveX调用WScript.Shell原理揭秘
开发语言
晴天的雨.9926 小时前
【C++】继承篇
java·开发语言·c++
SomeOtherTime6 小时前
第 1 讲:内存布局与所有权解剖——栈帧、胖指针与“移动/拷贝”在汇编层面的真实面目
java·开发语言·汇编
FYKJ_20107 小时前
springboot同人周边订单管理系统48955-计算机毕业设计、课程设计
java·javascript·vue.js·spring boot·django·php·课程设计