Microsoft hat eine offizielle Rust-Bibliothek für das Windows API veröffentlicht

Die Bibliothek ist als Rust-Crate unter der MIT-Lizenz gestaltet, die wie folgt verwendet werden kann:

[dependencies]
windows = "0.2.1"

[build-dependencies]
windows = "0.2.1"

Anschließend können in dem Build-Skript build.rs die erforderlichen Module für Ihre Anwendung generiert 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 so bereitgestellt werden, wie sie sind, ohne sie an die Konventionen von Rust anzupassen. Nach demselben Grundsatz ist das Crate libc, das als Basis-Crate für den Zugriff auf libc dient und als Grundlage für den Aufbau von Bibliotheken mit sicherem Interface verwendet wird.


Das Projekt wurde im Rahmen des Win32 Metadata Project, das darauf abzielt, die Erstellung von APIs für verschiedene Programmiersprachen zu erleichtern. Die zweite Bibliothek, die auf der Grundlage des Metadata-Projekts in der ersten Phase erstellt wurde, ist C#/Win32. Auch Microsoft hat den Start der Arbeit an der C++-Version, die den modernen Sprachstil verwendet, angekündigt.

Quelle: linux.org.ru

60GB SSD 8Gb DDR4