๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ MIT ๋ผ์ด์ ์ค์ ๋ฐ๋ผ Rust ํฌ๋ ์ดํธ๋ก ์ค๊ณ๋์์ผ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
[์ข ์์ฑ] ์ฐฝ = "0.2.1" [๋น๋ ์ข ์์ฑ] windows = "0.2.1"๊ทธ๋ฐ ๋ค์ build.rs ๋น๋ ์คํฌ๋ฆฝํธ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ํ ๋ชจ๋์ ์์ฑํ ์ ์์ต๋๋ค.
fn ๋ฉ์ธ() {
์ฐฝ::๋น๋!(
windows::data::xml::dom::*
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject}
windows::win32::windows_programming::CloseHandle
);
}
์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋์ ๋ํ ๋ฌธ์๋ ๋ค์์ ๊ฒ์๋์ด ์์ต๋๋ค. docs.rs.
๊ธฐ๋ณธ ์ฝ๋:
๋ชจ๋ ๋ฐ์ธ๋ฉ {
::windows::include_bounds!();
}
๋ฐ์ธ๋ฉ ์ฌ์ฉ::{
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(" ์๋
์ธ๊ณ ")?;
let root = doc.document_element()?;
์ฃผ์ฅ!(root.node_name()? == "html");
์ฃผ์ฅ!(root.inner_text()? == "hello world");
์์ ํ์ง ์์ {
์ด๋ฒคํธ = CreateEventW(
ํ์ค::ptr::null_mut(),
true.into(),
false.into(),
ํ์ค::ptr::null(),
);
SetEvent(์ด๋ฒคํธ).ok()?;
WaitForSingleObject(์ด๋ฒคํธ, 0);
CloseHandle(์ด๋ฒคํธ).ok()?;
}
์ข์์(())
}
์ผ๋ถ ํจ์ ํธ์ถ์ unsafe๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋ํ๋ฉด ์ด๋ฌํ ํจ์๋ Rust ๊ท์น์ ์ ์ฉ๋์ง ์๊ณ ์๋ ๊ทธ๋๋ก ์ ๊ณต๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์์๋ ๋์ผํ ์๋ฆฌ๋ก ์ค๊ณ๋์์ต๋๋ค. libc์, libc์ ์ก์ธ์คํ๊ธฐ ์ํ ๊ธฐ๋ณธ ์์ ์ญํ ์ ํ๋ฉฐ ๋ณด์ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
ํ๋ก์ ํธ๊ฐ ํ๋ ์์ํฌ ๋ด์์ ์์ฑ๋์์ต๋๋ค. Win32 ๋ฉํ๋ฐ์ดํฐ ํ๋ก์ ํธ, ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ํ API๋ฅผ ๋ ์ฝ๊ฒ ๋ง๋ค ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ํ๋ก์ ํธ XNUMX๋จ๊ณ์ ๋ฉํ๋ฐ์ดํฐ ํ๋ก์ ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ ๋ ๋ฒ์งธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ - C#/Win32. ๋ง์ดํฌ๋ก์ํํธ๋ ์์ ์์์ ๋ฐํํ๋ค. C++์ฉ ๋ฒ์ , ํ๋์ ์ธ ์คํ์ผ์ ์ธ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ถ์ฒ : linux.org.ru