La libreria è organizzata come un crate Rust sotto la Licenza MIT, utilizzabile in questo modo:
[dependencies]
windows = "0.2.1"
[build-dependencies]
windows = "0.2.1"
Dopo di che, nel file di build build.rs puoi generare i moduli necessari per la tua applicazione:
fn main() {
windows::build!("
windows::data::xml::dom::*
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject}
windows::win32::windows_programming::CloseHandle
);
}
La documentazione sui moduli disponibili è pubblicata su docs.rs.
Esempio di codice:
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()? == "hello world");
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(())
}
Per alcune chiamate di funzione si utilizza unsafe, poiché queste funzioni vengono fornite così come sono, senza adattarle alle convenzioni di Rust. Lo stesso principio si applica al crate libc, che funge da crate di base per accedere a libc e viene utilizzato come fondamento per costruire librerie con interfacce sicure.
Il progetto è stato creato nell'ambito del Win32 Metadata Project, progettata per semplificare la creazione di API per diversi linguaggi di programmazione. La seconda libreria, sviluppata sulla base del Metadata Project nella prima fase del progetto — C#/Win32. Microsoft ha anche annunciato l'avvio dei lavori su una versione per C++, che utilizza uno stile linguistico moderno.
Fonte: linux.org.ru
