Biblioteka je oblikovana kao Rust crate pod MIT licencom, koju možete koristiti ovako:
[dependencies]
windows = "0.2.1"
[build-dependencies]
windows = "0.2.1"
Nakon toga, u build.rs skripti možete generirati module koji su potrebni za vašu aplikaciju:
fn main() {
windows::build!(
windows::data::xml::dom::*
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject}
windows::win32::windows_programming::CloseHandle
);
}
Dokumentacija o dostupnim modulima objavljena je na docs.rs.
Primjer koda:
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(())
}
Za neke pozive funkcija koristi se unsafe, jer su te funkcije pružene onakve kakve jesu, bez prilagodbe Rust konvencijama. Na sličan način organiziran je crate libc, koji služi kao osnovni crate za pristup libc-u i koristi se kao temelj za izradu biblioteka s sigurnim sučeljem.
Projekt je stvoren u okviru Win32 Metadata Project, koji ima za cilj olakšati izradu API-ja za različite programske jezike. Druga biblioteka, koja je stvorena na temelju Metadata Projecta u prvoj fazi projekta — C#/Win32. Također je Microsoft najavio početak rada na verziji za C++, koja koristi suvremeni stil jezika.
Izvor: linux.org.ru
