2016-11-13 37 views
0

我正在嘗試使用winapi箱子爲我的VST plugin創建一個GUI。像user32::SetMenu這樣的函數需要一些句柄,其中一些可以是NULL將ptr :: null()投射到Windows句柄

下面的方法被調用時,該插件加載:

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文檔中找到解決方案。

+0

使用ptr :: null_mut()是解決方案。演員也可以被刪除。 :) – stubiklaus

回答