ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½Π° ΠΊΠ°ΡΠΎ ΠΊΡΡΠΈΡ Rust ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·Π° Π½Π° MIT, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
[Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ] windows = "0.2.1" [build-dependencies] windows = "0.2.1"Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π² ΡΠΊΡΠΈΠΏΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° build.rs ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
fn main() {
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!();
}
ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉ ΠΎΠ±Π²ΡΡΠ·Π²Π°Π½ΠΈΡ::{
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()?;
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()?;
}
ΠΠΎΠ±ΡΠ΅(())
}
ΠΡΠΊΠΎΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ unsafe, Π·Π°ΡΠΎΡΠΎ ΡΠ΅Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ ΡΠ°ΠΊΠΈΠ²Π°, ΠΊΠ°ΠΊΠ²ΠΈΡΠΎ ΡΠ°, Π±Π΅Π· Π΄Π° ΡΠ΅ Π°Π΄Π°ΠΏΡΠΈΡΠ°Ρ ΠΊΡΠΌ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΠΈΡΠ΅ Π½Π° Rust. Π©Π°ΠΉΠ³Π°ΡΠ° Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½Π° Π½Π° ΡΡΡΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ. Π±ΠΈΠ±Π»ΡΠΎΡΠ΅ΠΊΠ°ΡΠ°, ΠΊΠΎΠΉΡΠΎ ΡΠ»ΡΠΆΠΈ ΠΊΠ°ΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π° ΠΊΠ°ΡΠ° Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ libc ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ ΠΎΡΠ½ΠΎΠ²Π° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΡΡ Π·Π°ΡΠΈΡΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
ΠΡΠΎΠ΅ΠΊΡΡΡ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ ΠΡΠΎΠ΅ΠΊΡ Π·Π° ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ Win32, ΠΊΠΎΠΉΡΠΎ Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π° ΡΠ»Π΅ΡΠ½ΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° API Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΅Π·ΠΈΡΠΈ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅. ΠΡΠΎΡΠ°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΡΠΎ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½Π° Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π·Π° ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ Π² ΠΏΡΡΠ²Π°ΡΠ° ΡΠ°Π·Π° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° - C#/Win32. Microsoft ΡΡΡΠΎ ΠΎΠ±ΡΠ²ΠΈ Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΏΠΎ Π²Π΅ΡΡΠΈΡ Π·Π° C++, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠΎΠ΄Π΅ΡΠ΅Π½ ΡΡΠΈΠ» Π½Π° Π΅Π·ΠΈΠΊΠ°.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: linux.org.ru