ืžื™ื™ืงืจืึธืกืึธืคึฟื˜ ื”ืื˜ ื‘ืืคืจื™ื™ื˜ ื“ื™ ื‘ืึทืึทืžื˜ืขืจ ืจื•ืกื˜ ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืคึฟืึทืจ ื“ื™ Windows API

ื“ื™ ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืื™ื– ื“ื™ื–ื™ื™ื ื“ ื•ื•ื™ ืึท ื–ืฉืึทื•ื•ืขืจ ืงืจื™ื™ื˜ ืื•ื ื˜ืขืจ ื“ื™ MIT ืœื™ืกืขื ืกืข, ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ื•ื•ื™ ื“ืึธืก:

[dependencies] 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.

ืžื•ืกื˜ืขืจ ืงืึธื“:

ืžืึธื“ ื‘ื™ื™ื ื“ื™ื ื’ื– {
:: ืคึฟืขื ืฆื˜ืขืจ :: ื™ื ืงืœื•ื“ืข_ื‘ื™ื ื“ื™ื ื’ืก!();
}

ื ื•ืฆืŸ ื‘ื™ื™ื ื“ื™ื ื’ื–::{
windows::data::xml::dom::*,
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject},
windows::win32::windows_programming::CloseHandle,
};

fn main() -> windows::Result <()> {
ืœืึธื–ืŸ ืฉื•ืœื“ื‘ืึทื ืง = XmlDocument :: ื ื™ื™ึท ()?;
doc.load_xml(" ื”ืขืœื ื•ื•ืขืœื˜ ")?;

ืœืึธื–ืŸ ื•ื•ืึธืจืฆืœ = ื“ืึธืง.ื“ืึธืงื•ืžืขื ื˜_ืขืœืขืžืขื ื˜ ()?;
ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ! (root.node_name ()? == "ื”ื˜ืžืœ");
ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ! (root.inner_text()? == "ื”ืขืœื ื•ื•ืขืœื˜");

ื•ืžื–ื™ื›ืขืจ {
ืœืึธื–ืŸ ื’ืขืฉืขืขื ื™ืฉ = CreateEventW (
std::ptr::null_mut(),
true.into(),
false.into(),
std::ptr::null(),
);

ืกืขื˜ืขื•ื•ืขื ื˜ (ื’ืขืฉืขืขื ื™ืฉ). ื’ื•ื˜ ()?;
WaitForSingleObject (ื’ืขืฉืขืขื ื™ืฉ, 0);
ืงืœืึธืกืขื”ืึทื ื“ืœืข (ื’ืขืฉืขืขื ื™ืฉ) .ืึธืง()?;
}

ืืงืขื™(())
}

ืขื˜ืœืขื›ืข ืคื•ื ืงืฆื™ืข ืจื•ืคื˜ ื ื•ืฆืŸ ืึทื ืกื™ื™ืฃ ื•ื•ื™ื™ึทืœ ื“ื™ ืคืึทื ื’ืงืฉืึทื ื– ื–ืขื ืขืŸ ืฆื•ื’ืขืฉื˜ืขืœื˜ ื•ื•ื™ ื–ื™ื™ ื–ืขื ืขืŸ, ืึธืŸ ืึทื“ืึทืคึผื˜ื™ื ื’ ื–ื™ื™ ืฆื• ืจื•ืกื˜ ืงืึทื ื•ื•ืขื ืฉืึทื ื–. ืงืจื™ื™ื˜ ืื™ื– ื“ื™ื–ื™ื™ื ื“ ืื•ื™ืฃ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืคึผืจื™ื ืฆื™ืคึผ. libc, ื•ื•ืึธืก ืกืขืจื•ื•ืขืก ื•ื•ื™ ืึท ื™ืงืขืจื“ื™ืง ืงืจื™ื™ื˜ ืคึฟืึทืจ ืึทืงืกืขืก libc ืื•ืŸ ืื™ื– ื’ืขื ื™ืฆื˜ ื•ื•ื™ ืึท ื™ืงืขืจ ืคึฟืึทืจ ื‘ื ื™ืŸ ืœื™ื™ื‘ืจืขืจื™ื– ืžื™ื˜ ืึท ื–ื™ื›ืขืจ ืฆื•ื‘ื™ื ื“.


ื“ื™ ืคึผืจื•ื™ืขืงื˜ ืื™ื– ื’ืขื•ื•ืขืŸ ื‘ืืฉืืคืŸ ืื™ืŸ ื“ื™ ืคืจื™ื™ืžื•ื•ืขืจืง Win32 ืžืขื˜ืึทื“ืึทื˜ืึท ืคึผืจืึธื™ืขืงื˜, ื•ื•ืึธืก ืื™ื– ื“ื™ื–ื™ื™ื ื“ ืฆื• ืžืึทื›ืŸ ืขืก ื’ืจื™ื ื’ืขืจ ืฆื• ืฉืึทืคึฟืŸ ืึทืคึผื™ืก ืคึฟืึทืจ ืคืึทืจืฉื™ื“ืขื ืข ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคึผืจืึทื›ืŸ. ื“ื™ ืฆื•ื•ื™ื™ื˜ืข ื‘ื™ื‘ืœื™ืึธื˜ืขืง, ื•ื•ืึธืก ืื™ื– ื’ืขื•ื•ืขืŸ ื‘ืืฉืืคืŸ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ืžืขื˜ืึทื“ืึทื˜ืึท ืคึผืจืึธื™ืขืงื˜ ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืคืึทืกืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืคึผืจื•ื™ืขืงื˜ - C#/Win32. ืžื™ื™ืงืจืึธืกืึธืคึฟื˜ ืื•ื™ืš ืžื•ื“ื™ืข ื“ื™ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ืึทืจื‘ืขื˜ ืื•ื™ืฃ ื•ื•ืขืจืกื™ืข ืคึฟืึทืจ C ++, ื•ื•ืืก ื ื™ืฆื˜ ื ืžืื“ืขืจื ืขืจ ืฉืคืจืืš ื ื•ืกื—.

ืžืงื•ืจ: linux.org.ru