Microsoft выпусціла афіцыйную Rust бібліятэку для Windows API

Бібліятэка аформлена ў выглядзе Rust crate пад MIT License, які можна выкарыстоўваць вось так:

[dependencies] windows = "0.2.1"

[build-dependencies] windows = "0.2.1"

Пасля гэтага ў скрыпце зборкі build.rs можна згенераваць тыя модулі, якія патрэбныя для вашага прыкладання:

fn асноўны() {
windows::build!(
windows::data::xml::dom::*
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject}
windows::win32::windows_programming::CloseHandle
);
}

Дакументацыя аб даступных модулях апублікавана на docs.rs.

Прыклад кода:

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(" hello world ")?;

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()?;
}

Добра(())
}

Для некаторых выклікаў функцый выкарыстоўваецца unsafe, бо гэтыя функцыі прадастаўляюцца як яны ёсць, не адаптуючы іх да канвенцыямі Rust. Па такім жа прынцыпе уладкованы crate libc, Які служыць базавым crate для доступу да libc і выкарыстоўваецца як аснова для пастраення бібліятэк з бяспечным інтэрфейсам.


Праект створаны ў рамках Win32 Metadata Project, які закліканы аблегчыць стварэнне API для розных моў праграмавання. Другая бібліятэка, якая была створана на аснове Metadata Project на першае фазе праекта. C#/Win32. Таксама Microsoft анансавала пачатак працы над версіяй для З++, Якая выкарыстоўвае сучасны стыль мовы.

Крыніца: linux.org.ru