Rust:如何开发Windows 动态链接库 DLL

以下是一个完整的 Rust 创建 Windows DLL 动态库的实例,包含详细步骤和代码示例:

🚀 完整步骤

1. 创建 DLL 项目
cargo new --lib rust_dll
cd rust_dll
2. 配置 Cargo.toml
[package]
name = "rust_dll"
version = "0.1.0"
edition = "2021"

# 关键配置:指定生成动态链接库
[lib]
crate-type = ["cdylib"]  

[dependencies]
windows = { version = "0.54.0", features = [
    "Win32_Foundation", 
    "Win32_System_LibraryLoader"
]}
3. 编写 DLL 代码 (src/lib.rs)
use std::os::raw::c_char;
use std::ffi::{
   
   CStr, CString};
use windows::Win32::System::LibraryLoader;

// 基本数学函数示例
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
   
   
    a + b
}

// 字符串处理示例 (Rust <-> C)
#[no_mangle]
pub extern "C" fn to_uppercase(input: *const c_char) -> *mut c_char {
   
   
    let c_str = unsafe {
   
    CStr::from_ptr(input) };
    let r_str = c_str.to_str().unwrap();
    let uppercased = r_str.to_uppercase();
    
    CString::new(uppercased).unwrap().into_raw()
}

// 内存释放函数 (必须暴露!)
#[no_mangle]
pub extern "C" fn free_string(ptr: *mut c_char) {
   
   
    unsafe {
   
   
        if ptr.is_null() {
   
   
            return;
        }
        let _ = CString::from_raw(ptr);
    }
}

// DLL 入口点 (可选)
#[no_mangle]
pub extern "system" fn DllMain(
    _module: isize,
    call_reason: u32,
    _reserved: *mut std::ffi::c_void
) -> i32 {
   
   
    
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许野平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值