从 winit 获取 windows-rs HWND?

Getting a windows-rs HWND from winit?

我是 Rust 的新手,我正在尝试让以下内容起作用:

 let hwnd : *mut HWND = window.hwnd().cast();
 let swapchain = unsafe { factory.CreateSwapChainForHwnd(&device, *hwnd, &desc, std::ptr::null(), &output)? } ;

where window.hwnd() returns a *mut c_void 我需要将其转换为 windows::Windows::Win32::Foundation::HWND ,但此示例因访问冲突而崩溃。我假设它是因为我取消了指向 HWND 的指针,而 HWND 本身应该是 void ptr。 HWND 可以从 isize 创建,所以像 HWND(isize) 但我不确定是否应该获取 void 指针的地址或其他东西?感谢您的帮助。

你是对的,你需要将指针转换为 isize,所以尽管这与 recent developments 关于指针出处的冲突,但我相信构建 [=12= 的正确方法]如下:

let hwnd = HWND(window.hwnd() as isize);

isizeusize 被定义为指针宽度,因此将原始指针转换为这些类型之一是零成本,并且基本上只是擦除类型信息。

请注意,这是有效的,因为 HWND 只是一个新类型结构,其单个字段是 pub isize,因此 HWND(val) 语法只是将该字段设置为 [=18] 的结构初始化=].要访问该字段,您只需执行 my_hwnd.0,然后通过 my_hwnd.0 as *mut T.

转换为指针