Microsoft๋Š” Windows API์šฉ ๊ณต์‹ Rust ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” 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