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

如何将*mut c_void安全转换为HWND?类型不匹配问题求助

如何将*mut c_void安全转换为HWND(Rust windows crate)

你遇到的类型不匹配问题,是因为windows crate中的HWND是封装后的结构体,并非直接等价于原始指针类型,因此无法直接赋值转换。

正确转换方式

由于HWND内部基于isize实现,且提供了from_raw方法用于从原始句柄转换,你需要在unsafe块中完成转换(因为编译器无法验证原始指针的有效性,需要你自行保证指针是合法未释放的HWND):

use windows::Win32::Foundation::HWND;

let hwnd_ptr = match parent.handle {
    RawWindowHandle::Win32(_handle) => _handle.hwnd,
    _ => panic!("仅支持Win32窗口句柄"),
};

// 安全转换:需确保hwnd_ptr是有效的HWND
let test: HWND = unsafe { HWND::from_raw(hwnd_ptr as _) };

替代写法

你也可以直接通过HWND的结构体构造器完成转换,本质和from_raw一致:

let test = HWND(hwnd_ptr as isize);

注意事项

  • 转换必须放在unsafe块中(直接构造时虽然语法上不需要,但逻辑上仍然是不安全操作),因为你需要确保传入的*mut c_void确实是一个有效的、属于当前进程且未被销毁的HWND,否则会导致未定义行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:31:16