You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Rust中调用NetUseAdd时如何将USE_INFO_2结构体转为裸指针?

解决windows.rs调用NetUseAdd的类型错误问题

错误原因

NetUseAdd函数的第三个参数要求传入指向USE_INFO_2结构体的裸指针,而非结构体本身,原代码直接传入结构体实例导致类型不匹配。

修正后的代码

let mut parm_err: u32 = 0;
    let remote_path = conver_pwstr("//WIN-HDOB90189BJ/Users/test/Desktop/share");
    let password = conver_pwstr("test");
    let username = conver_pwstr("test");
    
    let mut use_info: USE_INFO_2 = USE_INFO_2::default();
    use_info.ui2_remote = remote_path; // 必须指定远程共享路径
    use_info.ui2_username = username;
    use_info.ui2_password = password;

    let level: u32 = 2;

    let status = NetUseAdd(
        None,
        level,
        // 将USE_INFO_2转换为函数要求的void指针
        &mut use_info as *mut USE_INFO_2 as *const _,
        // 传入参数错误信息的指针,不需要可替换为std::ptr::null_mut()
        &mut parm_err as *mut _
    );

    // 检查调用结果
    if status != NET_API_STATUS::NERR_Success {
        eprintln!("网络连接创建失败,错误码: {:?},参数错误索引: {}", status, parm_err);
    }
}

关键修改点

  • 指针转换:通过&mut use_info as *mut USE_INFO_2 as *const _将结构体实例转换为NetUseAdd要求的*const c_void类型指针。
  • 参数修正:原代码中parm_err的Option<*mut u32>不符合函数签名,直接传入变量的裸指针即可;若不需要参数错误信息,可传入std::ptr::null_mut()。
  • 补全必填字段:USE_INFO_2的ui2_remote是必填项,必须指定要连接的远程共享路径,否则调用会失败。

内容的提问来源于stack exchange,提问作者muteb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 06:20:59