当前位置: 首页 > article >正文

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


http://www.kler.cn/a/505022.html

相关文章:

  • 【Rust练习】28.use and pub
  • 信号与系统初识---信号的分类
  • 【C】初阶数据结构3 -- 单链表
  • 活动预告 | CCF开源发展委员会开源供应链安全技术研讨会(2025第一期)——“大模型时代的开源供应链安全风控技术”...
  • Java 锁
  • vue 文件下载实现
  • Redis 缓存穿透、击穿、雪崩 的区别与解决方案
  • 微软组建新内部 AI 研发组织:开启智能创新新篇章
  • GPT-SoVITS学习01
  • UDP、TCP特性
  • CasaOS小主机如何部署1Panel面板并实现远程管理服务器超实用教程
  • ubuntu 配置OpenOCD与RT-RT-thread环境的记录
  • 海康大数据面试题及参考答案
  • 【后端面试总结】Golang可能的内存泄漏场景及应对策略
  • Hessian矩阵 通过符号计算解析 Hessian 矩阵
  • 手机与平板:勒索软件的“天然通道”
  • 实时洞察、智能运营——新技术重塑企业绩效管理应用(上)
  • NLP自然语言处理分词模块PaddleNLP
  • 【赛博保安】安全Web日记文件下载漏洞逻辑越权漏洞密码爆破WebGoat靶场(四)
  • Android15源码编译问题处理
  • 阿里云数据传输服务使用场景
  • ASP.NET Core 多环境配置
  • python函数调用
  • C++实现设计模式---抽象工厂模式 (Abstract Factory)
  • CVPR 2024 自动驾驶方向总汇
  • RHCE的基本学习路线