рдорд╛рдпрдХреНрд░реЛрд╕реЙрдлреНрдЯрдиреЗ рд╡рд┐рдВрдбреЛрдЬ рдПрдкреАрдЖрдпрд╕рд╛рдареА рдЕрдзрд┐рдХреГрдд рд░рд╕реНрдЯ рд▓рд╛рдпрдмреНрд░рд░реА рдЬрд╛рд░реА рдХреЗрд▓реА рдЖрд╣реЗ

рдПрдордЖрдпрдЯреА рдкрд░рд╡рд╛рдиреНрдпрд╛рдЕрдВрддрд░реНрдЧрдд рд▓рд╛рдпрдмреНрд░рд░реАрдЪреА рд░рдЪрдирд╛ рд░рд╕реНрдЯ рдХреНрд░реЗрдЯ рдореНрд╣рдгреВрди рдХреЗрд▓реА рдЧреЗрд▓реА рдЖрд╣реЗ, рдЬреА рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ:

[dependencies] windows = "0.2.1"

[build-dependencies] windows = "0.2.1"

рдпрд╛рдирдВрддрд░, build.rs рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреНрдпреЗ, рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реЗ рдореЙрдбреНрдпреВрд▓ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛:

fn main() {
рдЦрд┐рдбрдХреНрдпрд╛ ::рдмрд┐рд▓реНрдб!(
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(" рдирдорд╕реНрдХрд╛рд░ рдЬрдЧ ");

рд░реВрдЯ = doc.document_element()?;
assert!(root.node_name()? == "html");
assert!(root.inner_text()? == "рд╣реЕрд▓реЛ рд╡рд░реНрд▓реНрдб");

рдЕрд╕реБрд░рдХреНрд╖рд┐рдд {
рдЗрд╡реНрд╣реЗрдВрдЯ рджреНрдпрд╛ = CreateEventW(
std::ptr::null_mut(),
true.into(),
false.into(),
std::ptr::null(),
);

SetEvent(event).ok()?;
WaitForSingleObject(рдЗрд╡реНрд╣реЗрдВрдЯ, 0);
CloseHandle(event).ok()?;
}

рдареАрдХ рдЖрд╣реЗ(())
}

рдХрд╛рд╣реА рдлрдВрдХреНрд╢рди рдХреЙрд▓реНрд╕ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд╛рдкрд░рддрд╛рдд рдХрд╛рд░рдг рд╣реА рдлрдВрдХреНрд╢рдиреНрд╕ рддреНрдпрд╛рдВрдирд╛ рд░рд╕реНрдЯ рдХрдиреНрд╡реНрд╣реЗрдиреНрд╢рдиреНрд╕рд╢реА рдЬреБрд│рд╡реВрди рди рдШреЗрддрд╛ рдЬрд╕реЗрдЪреНрдпрд╛ рддрд╢реА рджрд┐рд▓реА рдЬрд╛рддрд╛рдд. рдХреНрд░реЗрдЯ рддреНрдпрд╛рдЪ рддрддреНрддреНрд╡рд╛рд╡рд░ рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗ рдЖрд╣реЗ. libc, рдЬреЗ libc рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореВрд▓рднреВрдд рдХреНрд░реЗрдЯ рдореНрд╣рдгреВрди рдХрд╛рдо рдХрд░рддреЗ рдЖрдгрд┐ рд╕реБрд░рдХреНрд╖рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕рд╕рд╣ рд▓рд╛рдпрдмреНрд░рд░реА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдзрд╛рд░ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ.


рдордзреНрдпреЗ рдкреНрд░рдХрд▓реНрдк рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛ Win32 рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкреНрд░рдХрд▓реНрдк, рдЬреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдВрд╕рд╛рдареА API рддрдпрд╛рд░ рдХрд░рдгреЗ рд╕реЛрдкреЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗ рдЖрд╣реЗ. рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рдЯрдкреНрдкреНрдпрд╛рдд рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рджреБрд╕рд░реА рд▓рд╛рдпрдмреНрд░рд░реА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реА - C#/Win32. рдорд╛рдпрдХреНрд░реЛрд╕реЙрдлреНрдЯрдиреЗрд╣реА рдХрд╛рдо рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдЪреА рдШреЛрд╖рдгрд╛ рдХреЗрд▓реА C++ рд╕рд╛рдареА рдЖрд╡реГрддреНрддреА, рдЬреА рдЖрдзреБрдирд┐рдХ рд╢реИрд▓реАрдЪреА рднрд╛рд╖рд╛ рд╡рд╛рдкрд░рддреЗ.

рд╕реНрддреНрд░реЛрдд: linux.org.ru