Die Bibliothek ist als Rust-Crate unter der MIT-Lizenz verfügbar und kann wie folgt verwendet werden:
[dependencies]
windows = "0.2.1"
[build-dependencies]
windows = "0.2.1"
Danach können im Build-Skript build.rs die Module generiert werden, die für Ihre Anwendung benötigt werden:
fn main() {
windows::build!(
windows::data::xml::dom::*
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject}
windows::win32::windows_programming::CloseHandle
);
}
Die Dokumentation zu den verfügbaren Modulen ist veröffentlicht auf docs.rs.
Beispielcode:
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(())
}
Für einige Funktionsaufrufe wird unsafe verwendet, da diese Funktionen unverändert zur Verfügung gestellt werden, ohne sie an die Rust-Konventionen anzupassen. Nach demselben Prinzip ist das crate libc, das als Basis-Crate für den Zugriff auf libc dient und als Grundlage für den Bau von Bibliotheken mit sicherem Interface verwendet wird.
Das Projekt wurde im Rahmen des Win32 Metadata Project erstellt., die die Erstellung von APIs in verschiedenen Programmiersprachen erleichtern soll. Die zweite Bibliothek, die auf dem Metadata Project in der ersten Phase des Projekts basiert — C#/Win32. Außerdem hat Microsoft den Beginn der Arbeit an einer Version für C++, die den modernen Sprachstil verwendet.
Quelle: linux.org.ru
