andermatt64 / winapi-rs

Rust bindings to Windows API

Home Page:https://crates.io/crates/winapi

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

winapi-rs Build status Build Status Gitter Crates.io Lines of Code 100% unsafe

Documentation

Official IRC channel: #winapi on Mozilla IRC

This crate provides raw FFI bindings to all of Windows API. They are gathered by hand using the Windows 10 SDK from Microsoft. I aim to replace all existing Windows FFI in other crates with this crate through the "Embrace, extend, and extinguish" technique.

If this crate is missing something you need, feel free to create an issue, open a pull request, or contact me via other means.

This crate depends on Rust 1.6 or newer on Windows. On other platforms this crate is a no-op and should compile with Rust 1.0 or newer.

This branch is for winapi 0.3 which is a work in progress rewrite and as such is not suitable for production use. Please use winapi 0.2 in the meantime.

Example

Cargo.toml:

[dependencies]
winapi = "0.3"

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();
}

About

Rust bindings to Windows API

https://crates.io/crates/winapi

License:Apache License 2.0


Languages

Language:Rust 100.0%