从 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);
isize
和 usize
被定义为指针宽度,因此将原始指针转换为这些类型之一是零成本,并且基本上只是擦除类型信息。
请注意,这是有效的,因为 HWND
只是一个新类型结构,其单个字段是 pub isize
,因此 HWND(val)
语法只是将该字段设置为 [=18] 的结构初始化=].要访问该字段,您只需执行 my_hwnd.0
,然后通过 my_hwnd.0 as *mut T
.
转换为指针
我是 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);
isize
和 usize
被定义为指针宽度,因此将原始指针转换为这些类型之一是零成本,并且基本上只是擦除类型信息。
请注意,这是有效的,因为 HWND
只是一个新类型结构,其单个字段是 pub isize
,因此 HWND(val)
语法只是将该字段设置为 [=18] 的结构初始化=].要访问该字段,您只需执行 my_hwnd.0
,然后通过 my_hwnd.0 as *mut T
.