欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > rust调用DLL或lib

rust调用DLL或lib

2025/9/18 18:21:08 来源:https://blog.csdn.net/aiwo429001/article/details/145156338  浏览:    关键词: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");指定

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词