Microsoft har gitt ut det offisielle Rust-biblioteket for Windows API

Biblioteket er utformet som en rustkasse under MIT-lisensen, som kan brukes slik:

[dependencies] windows = "0.2.1"

[build-dependencies] windows = "0.2.1"

Etter dette, i build.rs build-skriptet, kan du generere modulene som trengs for applikasjonen din:

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

Dokumentasjon om tilgjengelige moduler er publisert på docs.rs.

Kodeeksempel:

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

bruk bindinger::{
windows::data::xml::dom::*,
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject},
windows::win32::windows_programmering::CloseHandle,
};

fn main() -> windows::Resultat<()> {
let doc = XmlDocument::new()?;
doc.load_xml(" Hei Verden ")?;

la root = doc.document_element()?;
hevde!(root.node_name()? == "html");
hevde!(root.inner_text()? == "hei verden");

utrygt {
la hendelse = CreateEventW(
std::ptr::null_mut(),
true.into(),
false.into(),
std::ptr::null(),
);

SetEvent(event).ok()?;
VentForSingleObject(hendelse, 0);
CloseHandle(event).ok()?;
}

Ok(())
}

Noen funksjonskall bruker usikre fordi disse funksjonene leveres som de er, uten å tilpasse dem til Rust-konvensjoner. Kassen er designet etter samme prinsipp. libc, som fungerer som en grunnleggende kasse for tilgang til libc og brukes som grunnlag for å bygge biblioteker med et sikkert grensesnitt.


Prosjektet ble opprettet innenfor rammen Win32 metadataprosjekt, som er designet for å gjøre det enklere å lage APIer for forskjellige programmeringsspråk. Det andre biblioteket, som ble opprettet basert på Metadata-prosjektet i den første fasen av prosjektet - C#/Win32. Microsoft annonserte også starten på arbeidet med versjon for C++, som bruker en moderne språkstil.

Kilde: linux.org.ru