2014-10-17 50 views
4

我剛開始學習Rust,想知道是否可以調用WinAPI函數而不安全?電話WinAPI沒有不安全塊

extern crate libc; 

fn main() { 
    unsafe { 
     libc::funcs::extra::kernel32::GetCurrentProcessId(); 
    } 
} 

回答

10

不,這是不可能的,因爲他們是直接綁定功能,在外部C庫,就像幾乎所有其他在libc箱。對於像GetCurrentProcessId()這樣的函數可能不是很明顯,但是這些函數不安全,因爲它們中有很多取得並返回原始指針和空終止的字符串。

爲了在沒有unsafe的情況下調用它們,應該有一個合適的安全包裝,就像任何其他C庫一樣。據我所知,目前還沒有這種包裝。但是你可以爲你需要的WinAPI函數的子集編寫一個,它不應該太難。你可以找到更多關於如何爲外部庫編寫安全包裝的細節herehere