ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΡΠΎΡΠΌΠ»Π΅Π½Π° Π² Π²ΠΈΠ΄Π΅ Rust crate ΠΏΠΎΠ΄ MIT License, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΎΡ ΡΠ°ΠΊ:
[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.
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°:
mod bindings {
::windows::include_bindings!();
}
use 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("<html>hello world</html>")?;
let root = doc.document_element()?;
assert!(root.node_name()? == "html");
assert!(root.inner_text()? == "hello world");
unsafe {
let event = CreateEventW(
std::ptr::null_mut(),
true.into(),
false.into(),
std::ptr::null(),
);
SetEvent(event).ok()?;
WaitForSingleObject(event, 0);
CloseHandle(event).ok()?;
}
Ok(())
}
ΠΠ»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ unsafe, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π΅ΡΡΡ, Π½Π΅ Π°Π΄Π°ΠΏΡΠΈΡΡΡ ΠΈΡ ΠΊ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΡΠΌΠΈ Rust. ΠΠΎ ΡΠ°ΠΊΠΎΠΌΡ ΠΆΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΡΡΡΡΠΎΠ΅Π½ crate libc, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»ΡΠΆΠΈΡ Π±Π°Π·ΠΎΠ²ΡΠΌ crate Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ libc ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΠ²Π° Π΄Π»Ρ ΠΏΠΎΡΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ.
ΠΡΠΎΠ΅ΠΊΡ ΡΠΎΠ·Π΄Π°Π½ Π² ΡΠ°ΠΌΠΊΠ°Ρ Win32 Metadata Project, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ·Π²Π°Π½ ΠΎΠ±Π»Π΅Π³ΡΠΈΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ API Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΎΡΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° ΡΠΎΠ·Π΄Π°Π½Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Metadata Project Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠ°Π·Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° — C#/Win32. Π’Π°ΠΊΠΆΠ΅ Microsoft Π°Π½ΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π»Π° Π½Π°ΡΠ°Π»ΠΎ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ Π²Π΅ΡΡΠΈΠ΅ΠΉ Π΄Π»Ρ Π‘++, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΡΠΈΠ»Ρ ΡΠ·ΡΠΊΠ°.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: linux.org.ru