Microsoft telah mengeluarkan perpustakaan Rust rasmi untuk API Windows

Perpustakaan ini direka bentuk sebagai peti Rust di bawah Lesen MIT, yang boleh digunakan seperti ini:

[dependencies] windows = "0.2.1"

[build-dependencies] windows = "0.2.1"

Selepas ini, dalam skrip binaan build.rs, anda boleh menjana modul yang diperlukan untuk aplikasi anda:

fn utama() {
tingkap:: bina!(
windows::data::xml::dom::*
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject}
windows::win32::windows_programming::CloseHandle
);
}

Dokumentasi tentang modul yang tersedia diterbitkan pada docs.rs.

Contoh kod:

pengikatan mod {
::windows::include_bindings!();
}

gunakan bindings::{
windows::data::xml::dom::*,
windows::win32::system_services::{CreateEventW, SetEvent, WaitForSingleObject},
windows::win32::windows_programming::CloseHandle,
};

fn main() -> windows::Result<()> {
biarkan doc = XmlDocument::new()?;
doc.load_xml(" Hai dunia ")?;

biarkan akar = doc.document_element()?;
tegaskan!(root.node_name()? == "html");
tegaskan!(root.inner_text()? == "hello world");

tidak selamat {
biarkan acara = CreateEventW(
std::ptr::null_mut(),
true.into(),
false.into(),
std::ptr::null(),
);

SetEvent(event).ok()?;
WaitForSingleObject(event, 0);
CloseHandle(event).ok()?;
}

Okey(())
}

Sesetengah panggilan fungsi menggunakan tidak selamat kerana fungsi ini disediakan sebagaimana adanya, tanpa menyesuaikannya dengan konvensyen Rust. Peti direka pada prinsip yang sama. libc, yang berfungsi sebagai peti asas untuk mengakses libc dan digunakan sebagai asas untuk membina perpustakaan dengan antara muka yang selamat.


Projek itu dibuat dalam Projek Metadata Win32, yang direka bentuk untuk memudahkan anda membuat API untuk bahasa pengaturcaraan yang berbeza. Perpustakaan kedua, yang dicipta berdasarkan Projek Metadata dalam fasa pertama projek - C#/Win32. Microsoft juga mengumumkan permulaan kerja pada versi untuk C++, yang menggunakan gaya bahasa moden.

Sumber: linux.org.ru