如今,如果语言界要评选一个网红,那无疑是Rust。Rust凭借其出色的安全性和效率已被各大平台所接受。Linux内核,Android的底层开发,Windows的底层开发都相继采用,并给出了相应的借口。MicrosoftWindows最近也发布了RustforWindowsv0.9。该更新包括全面的呼叫支持。Rust可以直接原生调用任何WindowsAPI,可以大大扩展Rust在Windows下的开发能力和范围。在本文中,我们通过示例学习RustforWindows(windows-rs)。概述本次更新提供了许多新功能和更新,根据官方信息包括:增加了对Win32和COMAPI的支持,统一了Windowscrate。这些WindowsAPI具有要添加的新项win32metadata。为了方便和一致,项目名称从“Rust/WinRT”更改为“RustforWindows”。添加了几个演示如何调用各种WindowsAPI(包括Win32、COM和WinRTAPI)的示例。Windowscrates在crates.io发布,现在支持MIT或Apache双开源许可证。内置生成绑定,无需手动编写。Windows支持在Linux上构建。对Win32API的许多改进和修复,例如支持数组类型、各种字符串类型和更新的元数据。添加了对COM接口(例如返回值)的更自然和惯用的支持,并支持涉及C样式联合和嵌套类型等内容的其他API。减少构建时间并改进错误处理。保留原始API大小写,这会影响使用Windowscrate的现有代码。通过将类似于QueryInterface的函数转换为泛型函数,可以更安全、更方便地调用许多COM相关的函数。环境配置要使用Windowcrate,首先需要在Windows下配置Rust开发环境,在Rust环境下的安装也非常简单,万无一失。安装rustup首先要从Rust官方(rust-lang.org)下载安装包rustup-init.exe(记得下载当前Windows对应的32位或64位版本)。然后直接执行安装包,安装程序自动配置好系统路径,以后可以直接在命令行使用,比如cargopackagemanager。安装C++构建工具。Windows下的Rust编译也依赖于MicrosoftC++构建工具。如果不安装,后面编译的时候会报错找不到“link.exe”。你需要从微软VS下载vs_buildtools,选择C++工具和WindowsSDK组件并安装。安装VSCode及其Rust插件另外为了方便,一般推荐安装VSCode及其Rust插件:crates-io国内源配置Rustcrate的国内源,因为官方crates-io国内下载速度太慢,甚至容易失败,所以首先配置国内源(如ustc)在用户目录C:\Users\CC\.cargo下创建一个config文件,配置内容为:ExampleFirst,通过cargo创建一个新的Rust项目:cargonewhello-chongchong上面的命令将创建一个新目录,hello-chongchong创建基本的项目框架目录和文件。进入该目录,使用--lib命令创建一个依赖库项目:cargonew--libbindings,然后通过代码在VSCode中打开该项目。截图如下:修改项目Cargo.toml文件,添加如下依赖,dependencies项告诉Cargo现在依赖新建的win库。[dependencies]bindings={path="bindings"}现在,在win文件夹下的Cargo.toml文件中,添加对Windowscrate的依赖,指定版本为最新的0.9.1。这通过允许Cargo打包下载、构建和缓存来启用Windows支持。[dependencies]windows="0.9.1"[build-dependencies]windows="0.9.1"然后在bindings目录下新建一个源文件build.rs,输入源码://build.rsfnmain(){windows::build!(Windows::Win32::WindowsAndMessaging::MessageBoxA);}在代码中,使用windows::build宏指定要使用的类型,再次列出所有需要使用的API,以及Windowscrate将直接元数据生成必要的绑定。然后在win/src目录下修改如下代码:windows::include_bindings!();这样就可以在主工程的main.rs文件中任意调用指定的WindowsAPI。这里我们创建一个“你好冲冲!”消息对话框。usebindings::Windows::Win32::WindowsAndMessaging::{MessageBoxA,MESSAGEBOX_STYLE};fnmain(){unsafe{MessageBoxA(None,"HelloChongchong!","Message",MESSAGEBOX_STYLE::MB_OK);}}注意任何Win32函数方法和COM接口方法都需要以不安全的方式调用。然后通过cargobuild编译工程,通过cargorun会弹出对话框。新版本的crate附带了一些示例,可以在windows-rs项目存储库的示例目录中找到。总结RustforWindows为Windows上的Rust应用程序开发带来了福音。虽然有些API可能已经被广泛使用了很长时间,但现在有了官方的支持,可以在文档、示例和稳定性方面有很大的提高。改进。
