文档
官方通信渠道:#生锈社区不和谐的Windows-dev
该板条箱为所有Windows API提供了RAW FFI绑定。它们是使用Microsoft的Windows 10 SDK手工收集的。我的目标是通过“拥抱,扩展和灭绝”技术用该板条箱中其他板条箱中的所有现有Windows FFI替换。
如果此板条箱缺少您需要的东西,请随时创建问题,打开拉动请求或通过其他方式与我联系。
该板条箱取决于生锈1.6或窗户上的较新。在其他平台上,这个板条箱是一个毫无疑问的,应该用Rust 1.2或更新的生锈编译。
使用std::mem::zeroed()创建一个联合实例,然后使用其中一种变体方法分配您想要的值。
每个模块都在功能标志上登机,因此您必须启用适当的功能才能访问这些项目。例如,如果您想使用winapi::um::winuser中的东西,则必须启用winuser功能。
您可以使用文档中的搜索功能查找定义项目的位置。
这个板条箱无非是与Windows API的原始绑定。如果您想知道如何使用Windows API中的各种功能,则可以查找MSDN上的各种项目,其中包含详细的文档。
no_std项目中使用此库吗?是的,绝对!默认情况下, winapi的std功能被禁用,使您可以使用core和winapi编写Windows应用程序。
winapi的HANDLE与std的HANDLE不兼容?因为默认情况下winapi不依赖于std ,因此必须定义c_void本身,而不是使用std::os::raw::c_void 。但是,如果您启用winapi的std功能,则它将从std重新启用c_void ,并导致winapi的HANDLE与std的HANDLE相同。
-sys板条箱,例如kernel32-sys吗?否。这些板条箱是winapi 0.2组织方式的遗产。从winapi开始,所有定义都直接在winapi本身中,因此不再需要使用这些-sys板条箱。
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 ( ) ;
} 您在项目中使用winapi吗?如果是这样,您可能有兴趣在Patreon上为我提供财务支持。特别是鼓励公司捐赠的公司(我在看着您的Microsoft)。