Microsoft a publié la bibliothèque officielle Rust pour l'API Windows

La bibliothèque est conçue comme une caisse Rust sous licence MIT, qui peut être utilisée comme ceci :

[dépendances] windows = "0.2.1"

[build-dependencies] windows = "0.2.1"

Après cela, dans le script de build build.rs, vous pouvez générer les modules nécessaires à votre application :

fn principal() {
windows::build!(
windows::data::xml::dom::*
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject}
windows :: win32 :: windows_programming :: CloseHandle
);
}

La documentation sur les modules disponibles est publiée sur docs.rs.

Exemple de code:

liaisons de mod {
::windows::include_bindings!();
}

utiliser des liaisons ::{
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(" Bonjour le monde " ? ;

laissez root = doc.document_element()?;
assert!(root.node_name()? == "html");
assert!(root.inner_text()? == "hello world");

peu sûr {
laissez l'événement = CreateEventW (
std::ptr::null_mut(),
true.into(),
false.into(),
std::ptr::null(),
);

SetEvent(événement).ok(?);
WaitForSingleObject(événement, 0);
CloseHandle(événement).ok(?);
}

D'accord(())
}

Certains appels de fonctions utilisent unsafe car ces fonctions sont fournies telles quelles, sans les adapter aux conventions Rust. Crate est conçu sur le même principe. libc, qui sert de caisse de base pour accéder à la libc et est utilisé comme base pour créer des bibliothèques avec une interface sécurisée.


Le projet a été créé dans le cadre Projet de métadonnées Win32, conçu pour faciliter la création d'API pour différents langages de programmation. La deuxième bibliothèque, créée sur la base du projet Metadata lors de la première phase du projet - C#/Win32. Microsoft a également annoncé le début des travaux sur version pour C++, qui utilise un style de langage moderne.

Source: linux.org.ru