Windows版Rust

2021-01-22 04:11:42

使用Windows crate,您可以直接使用从描述API的元数据中即时生成的代码来调用过去,现在和将来的任何Windows API,然后直接进入Rust包,在其中可以像调用另一个Rust模块一样调用它们。

Rust语言投影遵循C ++ / WinRT建立的传统,即使用标准语言和编译器为Windows构建语言投影,从而为Rust开发人员调用Windows API提供了自然而惯用的方式。

这将允许Cargo打包下载,构建和缓存Windows支持。接下来,在build.rs构建脚本中指定所需的类型,然后Windows crate将生成必要的绑定:

mod绑定{:: windows :: include_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>")?让root = doc。 document_element()?;断言!(root。node_name()?==" html"); assert!(root。inner_text()?==" hello world");不安全{let event = CreateEventW(std :: ptr :: null_mut(),true。toin(),false。into(),std :: ptr :: null(),); SetEvent(事件)。好()?; WaitForSingleObject(event,0); CloseHandle(事件)。好()?; } 好(())}

为了减少构建时间,请使用绑定箱而不是简单地使用模块。这将使Cargo缓存结果并更快地构建项目。

Windows API有一个实验性的文档生成器。该文档在此处发布。这对于找出各种Windows API如何映射到Rust模块以及使用哪些宏需要在build宏中使用的路径很有用。

对于更完整的示例,请看一下Robert Mikhayelyan的扫雷艇。在这里可以找到更简单的示例。