La biblioteca está configurada como un crate de Rust bajo la Licencia MIT, que se puede utilizar así:
[dependencies]
windows = "0.2.1"
[build-dependencies]
windows = "0.2.1"
Después de esto, en el script de construcción build.rs se pueden generar los módulos que necesite su aplicación:
fn main() {
windows::build!(
windows::data::xml::dom::*
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject}
windows::win32::windows_programming::CloseHandle
);
}
La documentación sobre los módulos disponibles está publicada en docs.rs.
Ejemplo de código:
mod bindings {
::windows::include_bindings!();
}
use bindings::{
windows::data::xml::dom::*,
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject},
windows::win32::windows_programming::CloseHandle,
};
fn main() -> windows::Result {
let doc = XmlDocument::new()?;
doc.load_xml("<html>hello world</html>")?;
let root = doc.document_element()?;
assert!(root.node_name()? == "html");
assert!(root.inner_text()? == "hola mundo");
unsafe {
let event = CreateEventW(
std::ptr::null_mut(),
true.into(),
false.into(),
std::ptr::null(),
);
SetEvent(event).ok()?;
WaitForSingleObject(event, 0);
CloseHandle(event).ok()?;
}
Ok(())
}
Para algunas llamadas a funciones se utiliza unsafe, ya que estas funciones se proporcionan tal como son, sin adaptarlas a las convenciones de Rust. La crate está organizada de la misma manera libc, que sirve como la crate base para acceder a libc y se usa como base para construir bibliotecas con una interfaz segura.
El proyecto fue creado como parte del Win32 Metadata Project, que busca facilitar la creación de API para diferentes lenguajes de programación. La segunda biblioteca que se desarrolló sobre la base del Metadata Project en la primera fase del proyecto es C#\/Win32. Microsoft también anunció el inicio de trabajos en una versión para C++, que utiliza un estilo moderno del lenguaje.
Fuente: linux.org.ru
