Dokumentasi
Saluran Komunikasi Resmi: #Windows-Dev tentang Perselisihan Komunitas Rust
Peti ini memberikan binding FFI mentah untuk semua Windows API. Mereka dikumpulkan dengan tangan menggunakan Windows 10 SDK dari Microsoft. Saya bertujuan untuk mengganti semua Windows FFI yang ada di peti lain dengan peti ini melalui teknik "merangkul, memperluas, dan memadamkan".
Jika peti ini kehilangan sesuatu yang Anda butuhkan, jangan ragu untuk membuat masalah, buka permintaan tarik, atau hubungi saya melalui cara lain.
Peti ini tergantung pada Rust 1.6 atau yang lebih baru di Windows. Pada platform lain peti ini tidak ada op dan harus dikompilasi dengan karat 1.2 atau yang lebih baru.
Gunakan std::mem::zeroed() untuk membuat instance dari Union, dan kemudian menetapkan nilai yang Anda inginkan menggunakan salah satu metode varian.
Setiap modul terjaga keamanannya pada bendera fitur, sehingga Anda harus mengaktifkan fitur yang sesuai untuk mendapatkan akses ke item tersebut. Misalnya, jika Anda ingin menggunakan sesuatu dari winapi::um::winuser Anda harus mengaktifkan fitur winuser .
Anda dapat menggunakan fungsi pencarian dalam dokumentasi untuk menemukan di mana item didefinisikan.
Peti ini tidak lebih dari binding mentah ke Windows API. Jika Anda ingin tahu cara menggunakan berbagai fungsionalitas di Windows API, Anda dapat mencari berbagai item pada MSDN yang penuh dengan dokumentasi terperinci.
no_std ? Ya, benar -benar! Secara default, fitur std winapi dinonaktifkan, memungkinkan Anda untuk menulis aplikasi Windows menggunakan apa pun kecuali core dan winapi .
HANDLE winapi tidak kompatibel dengan HANDLE std ? Karena winapi tidak bergantung pada std secara default, ia harus mendefinisikan c_void sendiri alih -alih menggunakan std::os::raw::c_void . Namun, jika Anda mengaktifkan fitur std winapi maka itu akan mengekspor kembali c_void dari std dan menyebabkan HANDLE winapi menjadi tipe yang sama dengan HANDLE std .
-sys seperti kernel32-sys ? Tidak. Peti -peti itu adalah warisan bagaimana winapi 0.2 diatur. Dimulai dengan winapi 0.3 Semua definisi langsung di winapi itu sendiri, dan karenanya tidak perlu lagi menggunakan -sys itu.
Cargo.toml:
[ target . 'cfg(windows)' . dependencies ]
winapi = { version = " 0.3 " , features = [ " winuser " ] }Main.rs:
# [ cfg ( windows ) ] extern crate winapi ;
use std :: io :: Error ;
# [ cfg ( windows ) ]
fn print_message ( msg : & str ) -> Result < i32 , Error > {
use std :: ffi :: OsStr ;
use std :: iter :: once ;
use std :: os :: windows :: ffi :: OsStrExt ;
use std :: ptr :: null_mut ;
use winapi :: um :: winuser :: { MB_OK , MessageBoxW } ;
let wide : Vec < u16 > = OsStr :: new ( msg ) . encode_wide ( ) . chain ( once ( 0 ) ) . collect ( ) ;
let ret = unsafe {
MessageBoxW ( null_mut ( ) , wide . as_ptr ( ) , wide . as_ptr ( ) , MB_OK )
} ;
if ret == 0 { Err ( Error :: last_os_error ( ) ) }
else { Ok ( ret ) }
}
# [ cfg ( not ( windows ) ) ]
fn print_message ( msg : & str ) -> Result < ( ) , Error > {
println ! ( "{}" , msg ) ;
Ok ( ( ) )
}
fn main ( ) {
print_message ( "Hello, world!" ) . unwrap ( ) ;
} Apakah Anda menggunakan winapi dalam proyek Anda? Jika demikian, Anda mungkin tertarik untuk mendukung saya secara finansial di Patreon. Perusahaan khususnya sangat didorong untuk menyumbang (saya melihat Anda Microsoft).