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)? } ;

,其中window.hwnd()返回*mut c_void,我需要将其转换为windows::Windows::Win32::Foundation::HWND,但这个例子在访问冲突时崩溃。我认为这是因为我推导了一个指向HWND的指针,而HWND本身应该是void ptr。HWND可以从isize创建,所以像HWND(isize),但我不确定是否应该得到void指针的地址或什么?如有任何帮助,不胜感激。

您是对的,您需要将指针转换为isize,因此,尽管这与最近关于指针来源的发展相冲突,但我认为构建HWND的正确方法如下:

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

isizeusize被定义为指针宽度,因此将原始指针转换为其中一种类型的成本为零,实际上只是删除类型信息。

注意,这是有效的,因为HWND只是一个newtype结构体,它的单个字段是pub isize,所以HWND(val)语法只是初始化该结构体的字段设置为val。要访问该字段,只需执行my_hwnd.0,并通过my_hwnd.0 as *mut T转换为指针。

相关内容

  • 没有找到相关文章

最新更新