Firma Microsoft udostępniła oficjalną bibliotekę Rust dla interfejsu API systemu Windows

Biblioteka została zaprojektowana jako skrzynia Rust na licencji MIT, której można używać w następujący sposób:

[zależności] okna = „0.2.1”

[zależności kompilacji] Windows = „0.2.1”

Następnie w skrypcie kompilacji build.rs możesz wygenerować moduły potrzebne dla Twojej aplikacji:

fn główna() {
Windows::kompiluj!(
Windows::data::xml::dom::*
Windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject}
Windows::win32::windows_programming::CloseHandle
);
}

Dokumentacja dostępnych modułów opublikowana jest na stronie dokumenty.rs.

Przykładowy kod:

powiązania modów {
::windows::include_bindings!();
}

użyj powiązań::{
Windows::data::xml::dom::*,
Windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject},
Windows::win32::windows_programming::CloseHandle,
};

fn main() -> Windows::Wynik<()> {
niech doc = XmlDocument::new()?;
dokument.load_xml(" Witaj świecie ")?;

niech root = dokument.document_element()?;
Assert!(root.node_name()? == "html");
Assert!(root.inner_text()? == "Witaj, świecie");

niebezpieczny {
niech zdarzenie = CreateEventW(
std::ptr::null_mut(),
prawda.do(),
fałsz.do(),
std::ptr::null(),
);

SetEvent(zdarzenie).ok()?;
WaitForSingleObject(zdarzenie, 0);
CloseHandle(zdarzenie).ok()?;
}

OK(())
}

Niektóre wywołania funkcji używają unsafe, ponieważ te funkcje są dostarczane w niezmienionej postaci, bez dostosowywania ich do konwencji Rusta. Skrzynia została zaprojektowana na tej samej zasadzie. libc, który służy jako podstawowa skrzynka dostępu do biblioteki libc i służy jako podstawa do budowania bibliotek z bezpiecznym interfejsem.


Projekt powstał w ramach Projekt metadanych Win32, który ma na celu ułatwienie tworzenia interfejsów API dla różnych języków programowania. Druga biblioteka, która powstała w oparciu o Metadata Project w pierwszej fazie projektu - C#/Win32. Microsoft ogłosił także rozpoczęcie prac nad wersja dla C++, który wykorzystuje nowoczesny styl języka.

Źródło: linux.org.ru