Microsoft เป„เบ”เป‰เบ›เปˆเบญเบเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” Rust เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบš Windows API

เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป„เบ”เป‰เบ–เบทเบเบญเบญเบเปเบšเบšเป€เบ›เบฑเบ™ crate Rust เบžเบฒเบเปƒเบ•เป‰เปƒเบšเบญเบฐเบ™เบธเบเบฒเบ” MIT, เบŠเบถเปˆเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

[dependencies] windows = "0.2.1"

[build-dependencies] windows = "0.2.1"

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เปƒเบ™ build.rs build script, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป‚เบกเบ”เบนเบ™เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™:

fn เบซเบผเบฑเบ() {
windows::เบชเป‰เบฒเบ‡!(
windows::data::xml::dom::*
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject}
windows::win32::windows_programming::CloseHandle
);
}

เป€เบญเบเบฐเบชเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเป‚เบกเบ”เบนเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบกเปˆเบ™เป„เบ”เป‰เบ–เบทเบเป€เบœเบตเบเปเบœเปˆเปƒเบ™ docs.rs.

เบฅเบฐเบซเบฑเบ”เบ•เบปเบงเบขเปˆเบฒเบ‡:

mod bindings {
::windows::include_bindings!();
}

เปƒเบŠเป‰เบเบฒเบ™เบœเบนเบเบกเบฑเบ”::{
windows::data::xml::dom::*,
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject},
windows::win32::windows_programming::CloseHandle,
};

fn main() -> windows::Result<()> {
เปƒเบซเป‰ doc = XmlDocument::new();
doc.load_xml(" เบชเบฐโ€‹เบšเบฒเบโ€‹เบ”เบตโ€‹เบŠเบฒเบงโ€‹เป‚เบฅเบ ")?;

เปƒเบซเป‰ root = doc.document_element();
เบขเบทเบ™เบขเบฑเบ™!(root.node_name()? == "html");
เบขเบทเบ™เบขเบฑเบ™!(root.inner_text()? == "เบชเบฐเบšเบฒเบเบ”เบตเป‚เบฅเบ");

เบšเปเปˆเบ›เบญเบ”เป„เบž {
เปƒเบซเป‰เป€เบซเบ”เบเบฒเบ™ = CreateEventW(
std::ptr::null_mut(),
true.into(),
false.into(),
std::ptr::null(),
);

SetEvent(เป€เบซเบ”เบเบฒเบ™).ok()?;
WaitForSingleObject(เป€เบซเบ”เบเบฒเบ™, 0);
CloseHandle(เป€เบซเบ”เบเบฒเบ™).ok()?;
}

เบ•เบปเบโ€‹เบฅเบปเบ‡(())
}

เบเบฒเบ™เป‚เบ—เบšเบฒเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™เปƒเบŠเป‰เบšเปเปˆเบ›เบญเบ”เป„เบžเป€เบžเบฒเบฐเบงเปˆเบฒเบŸเบฑเบ‡เบŠเบฑเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ–เบทเบเบชเบฐเปœเบญเบ‡เปƒเบซเป‰เบ„เบทเบเบฑเบšเบ—เบตเปˆเป€เบ›เบฑเบ™เบขเบนเปˆ, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ›เบฑเบšเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป€เบ‚เบปเป‰เบฒเบเบฑเบšเบชเบปเบ™เบ—เบดเบชเบฑเบ™เบเบฒ Rust. Crate เบ–เบทเบเบญเบญเบเปเบšเบšเปƒเบ™เบซเบผเบฑเบเบเบฒเบ™เบ”เบฝเบงเบเบฑเบ™. libc, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™ crate เบžเบทเป‰เบ™เบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ libc เปเบฅเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบ›เบฑเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบกเบตเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ—เบตเปˆเบ›เบญเบ”เป„เบž.


เป‚เบ„เบ‡เบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™เบเบญเบš เป‚เบ„เบ‡เบเบฒเบ™เป€เบกเบ•เบฒเป€เบ”เบ•เบฒ Win32, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบชเป‰เบฒเบ‡ APIs เบชเปเบฒเบฅเบฑเบšเบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเบชเบญเบ‡, เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเป‚เบ„เบ‡เบเบฒเบ™ Metadata เปƒเบ™เป„เบฅเบเบฐเบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™ - C#/Win32. Microsoft เบเบฑเบ‡เป„เบ”เป‰เบ›เบฐเบเบฒเบ”เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเปˆเบฝเบงเบเบฑเบš เบฎเบธเปˆเบ™เบชเปเบฒเบฅเบฑเบš C ++, เป€เบŠเบดเปˆเบ‡เปƒเบŠเป‰เบฎเบนเบšเปเบšเบšเบžเบฒเบชเบฒเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบก.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: linux.org.ru