将 ptr::null() 转换为 Windows 句柄
Cast a ptr::null() to a Windows handle
我正在尝试使用 winapi crate 为我的 VST plugin 创建一个 GUI。像 user32::SetMenu
这样的函数需要一些句柄,其中一些可以是 NULL
.
加载插件时调用以下方法:
fn open(&mut self, window: *mut c_void) {
unsafe {
let menu = user32::CreateMenu();
let sub_menu = user32::CreateMenu();
let hwnd: HWND = window as HWND;
user32::SetMenu(hwnd, menu);
let mut data = OsString::from("heee");
let raw = &mut data as *mut _ as LPWSTR;
let mut menu_item = MENUITEMINFOW {
cbSize: 0,
fMask: 0o0000_0020 | 0o0000_0040,
fType: 0,
fState: 0,
wID: MENUITEM_ID,
hSubMenu: sub_menu,
hbmpChecked: ptr::null() as HBITMAP,
hbmpUnchecked: ptr::null() as HBITMAP,
dwItemData: 0,
dwTypeData: raw,
cch: 0,
hbmpItem: ptr::null() as *mut _,
};
menu_item.cbSize = mem::size_of_val(&menu_item) as u32;
user32::InsertMenuItemW(menu, MENUITEM_ID, 0, &menu_item);
}
self.open = true;
}
但是,我无法通过 NULL
的句柄:
hbmpChecked: ptr::null() as HBITMAP,
我收到错误消息
hbmpChecked: ptr::null() as HBITMAP,
^^^^^^^^^ cannot infer type for `_`
我在 winapi/user32 的文档中找不到解决方案。
Here is how HBITMAP
is defined in winapi:
type HBITMAP = *mut HBITMAP__;
这使得 HBITMAP
成为一个可变的原始指针。 ptr::null()
returns a const raw pointer. You should use ptr::null_mut()
相反,因为它 returns 是一个可变的原始指针,所以编译器将能够推断出正确的类型。
我正在尝试使用 winapi crate 为我的 VST plugin 创建一个 GUI。像 user32::SetMenu
这样的函数需要一些句柄,其中一些可以是 NULL
.
加载插件时调用以下方法:
fn open(&mut self, window: *mut c_void) {
unsafe {
let menu = user32::CreateMenu();
let sub_menu = user32::CreateMenu();
let hwnd: HWND = window as HWND;
user32::SetMenu(hwnd, menu);
let mut data = OsString::from("heee");
let raw = &mut data as *mut _ as LPWSTR;
let mut menu_item = MENUITEMINFOW {
cbSize: 0,
fMask: 0o0000_0020 | 0o0000_0040,
fType: 0,
fState: 0,
wID: MENUITEM_ID,
hSubMenu: sub_menu,
hbmpChecked: ptr::null() as HBITMAP,
hbmpUnchecked: ptr::null() as HBITMAP,
dwItemData: 0,
dwTypeData: raw,
cch: 0,
hbmpItem: ptr::null() as *mut _,
};
menu_item.cbSize = mem::size_of_val(&menu_item) as u32;
user32::InsertMenuItemW(menu, MENUITEM_ID, 0, &menu_item);
}
self.open = true;
}
但是,我无法通过 NULL
的句柄:
hbmpChecked: ptr::null() as HBITMAP,
我收到错误消息
hbmpChecked: ptr::null() as HBITMAP,
^^^^^^^^^ cannot infer type for `_`
我在 winapi/user32 的文档中找不到解决方案。
Here is how HBITMAP
is defined in winapi:
type HBITMAP = *mut HBITMAP__;
这使得 HBITMAP
成为一个可变的原始指针。 ptr::null()
returns a const raw pointer. You should use ptr::null_mut()
相反,因为它 returns 是一个可变的原始指针,所以编译器将能够推断出正确的类型。