Microsoft har släppt det officiella Rust-biblioteket för Windows API

Biblioteket är designat som en Rust-låda under MIT-licensen, som kan användas så här:

[beroenden] windows = "0.2.1"

[build-dependencies] windows = "0.2.1"

Efter detta, i build.rs build-skriptet, kan du generera de moduler som behövs för din applikation:

fn main() {
windows::bygg!(
windows::data::xml::dom::*
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject}
windows::win32::windows_programmering::CloseHandle
);
}

Dokumentation om tillgängliga moduler publiceras på docs.rs.

Exempelkod:

mod bindningar {
::windows::include_bindings!();
}

använd bindningar::{
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(" Hej världen ")?;

låt root = doc.document_element()?;
hävda!(root.node_name()? == "html");
hävda!(root.inner_text()? == "hej världen");

osäker {
låt händelse = SkapaEventW(
std::ptr::null_mut(),
true.into(),
false.into(),
std::ptr::null(),
);

SetEvent(event).ok()?;
WaitForSingleObject(händelse, 0);
CloseHandle(event).ok()?;
}

Ok(())
}

Vissa funktionsanrop använder osäkra eftersom dessa funktioner tillhandahålls som de är, utan att anpassa dem till Rust-konventioner. Crate är designad på samma princip. libc, som fungerar som en grundläggande låda för åtkomst till libc och används som bas för att bygga bibliotek med ett säkert gränssnitt.


Projektet skapades inom ramen Win32 metadataprojekt, som är designad för att göra det enklare att skapa API:er för olika programmeringsspråk. Det andra biblioteket, som skapades baserat på Metadataprojektet i projektets första fas - C#/Win32. Microsoft meddelade också starten på arbetet med version för C++, som använder en modern språkstil.

Källa: linux.org.ru