我对锈病相当陌生,我正试图让以下几点发挥作用:
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本身应该是无效的ptr。HWND可以从一个isize创建,比如HWND(isize),但是我不确定它是否应该得到空指针的地址还是什么的?任何帮助都是非常感谢的。
发布于 2022-05-13 00:37:15
您正确地认为需要将指针转换为isize,因此尽管在指针来源方面与最近的发展发生冲突,但我认为构造HWND的正确方法如下:
let hwnd = HWND(window.hwnd() as isize);isize和usize被定义为指针宽度,因此将原始指针转换为这些类型之一是零成本,本质上只是擦除类型信息。
注意,这是因为HWND只是一个新类型的结构,它的单个字段是pub isize,所以HWND(val)语法只是将该字段设置为val来初始化结构。要访问该字段,只需执行my_hwnd.0,并通过my_hwnd.0 as *mut T转换为指针。
https://stackoverflow.com/questions/72223205
复制相似问题