La bibliothèque est présentée sous la forme d'un crate Rust sous la licence MIT, que vous pouvez utiliser comme suit :
[dependencies]
windows = "0.2.1"
[build-dependencies]
windows = "0.2.1"
Ensuite, dans le script de construction build.rs, vous pouvez générer les modules dont votre application a besoin :
fn main() {
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 :
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(())
}
Pour certains appels de fonction, la méthode unsafe est utilisée, car ces fonctions sont fournies telles quelles, sans adaptation aux conventions de Rust. Le crate libc, qui sert de crate de base pour accéder à libc, est utilisé comme fondation pour construire des bibliothèques avec une interface sécurisée.
Le projet a été créé dans le cadre de Win32 Metadata Project, qui a pour objectif de faciliter la création d'API pour différents langages de programmation. La deuxième bibliothèque créée à partir de Metadata Project lors de la première phase du projet est C#\/Win32. Microsoft a également annoncé le début du travail sur une version pour C++, qui utilise un style moderne du langage.
Source : linux.org.ru
