Microsoft нь Windows API-д зориулсан албан ёсны Rust номын санг гаргасан

Номын сан нь MIT лицензийн дагуу Rust хайрцаг хэлбэрээр бүтээгдсэн бөгөөд үүнийг дараах байдлаар ашиглаж болно.

[хамааралтай байдал] windows = "0.2.1"

[байгах-хамаарал] windows = "0.2.1"

Үүний дараа build.rs build скрипт дээр та өөрийн хэрэглээнд шаардлагатай модулиудыг үүсгэж болно:

fn main() {
windows :: бүтээх!(
windows::data::xml::dom::*
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject}
windows::win32::windows_programming::CloseHandle
);
}

Боломжтой модулиудын талаарх баримт бичгийг нийтэлсэн docs.rs.

Жишээ код:

мод холбох {
::windows::include_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("Сайн уу ертөнц")?;

let root = doc.document_element()?;
assert!(root.node_name()? == "html");
assert!(root.inner_text()? == "Сайн уу ертөнц");

аюултай {
let event = CreateEventW(
std::ptr::null_mut(),
true.into(),
false.into(),
std::ptr::null(),
);

SetEvent(үйл явдал).ok()?;
WaitForSingleObject(үйл явдал, 0);
CloseHandle(үйл явдал).ok()?;
}

Болж байна уу(())
}

Зарим функцийн дуудлагууд нь эдгээр функцуудыг Rust-ийн конвенцид нийцүүлэхгүйгээр байгаагаар нь хангадаг тул аюултай ашигладаг. Крат нь ижил зарчмаар бүтээгдсэн. libc, энэ нь libc-д хандах үндсэн хайрцаг болж, аюулгүй интерфэйс бүхий номын сан байгуулахад үндэс болгон ашигладаг.


Үүний хүрээнд төслийг бий болгосон Win32 мета өгөгдлийн төсөл, энэ нь өөр өөр програмчлалын хэлэнд API үүсгэхэд хялбар болгох зорилготой юм. Төслийн эхний үе шатанд мета өгөгдлийн төсөл дээр үндэслэн бүтээсэн хоёр дахь номын сан - C#/Win32. Майкрософт мөн ажлаа эхлүүлж байгаагаа зарлав C++-д зориулсан хувилбар, энэ нь орчин үеийн хэлний хэв маягийг ашигладаг.

Эх сурвалж: linux.org.ru