Knihovna je formátována jako Rust crate pod MIT licencí, kterou lze použít takto:
[dependencies]
windows = "0.2.1"
[build-dependencies]
windows = "0.2.1"
Poté lze ve skriptu pro sestavení build.rs vygenerovat moduly potřebné pro vaši aplikaci:
fn main() {
windows::build!(
windows::data::xml::dom::*
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject}
windows::win32::windows_programming::CloseHandle
);
}
Dokumentace o dostupných modulech je publikována na docs.rs.
Ukázka kódu:
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(())
}
Pro některé volání funkcí je použitý unsafe, protože tyto funkce jsou poskytovány tak, jak jsou, bez úpravy na konvence Rust. Stejným způsobem je vytvořen crate libc, který slouží jako základní crate pro přístup k libc a používá se jako základ pro budování knihoven s bezpečným rozhraním.
Projekt byl vytvořen v rámci Win32 Metadata Project, který má usnadnit vytváření API pro různé programovací jazyky. Druhá knihovna, která byla vytvořena na základě Metadata Project v první fázi projektu — C#/Win32. Microsoft také oznámila zahájení práce na verzi pro C++, která používá moderní styl jazyka.
Zdroj: linux.org.ru
