概述
本次更新提供了很多新的特性和更新,根据官方的信息包括:
添加了对Win32和COM API的支持,统一了Windows板条箱。这些Windows API有新的项目win32metadata来添加。为了方便和统一,项目名称由“Rust/WinRT”更改为“Rust for Windows”。
添加了几个示例 ,演示了如何调用各种Windows API(包括Win32,COM和WinRT API)。
Windows 板条箱在crates.io发布,现在支持兆启带MIT或Apache双开源版权。
内置生成的binding,无需再手动编写。
Windows支持在Linux上构建。
Win32 API的许多改进和修复,例如对数组类型,各种字符串类型和更新的元数据的支持。
添加了对COM接口的更自然和惯用的支持,例如返回值,以及对涉及C样式联合和嵌套类型之类的其他API的支持。
缩短了构建时间并改善了错误处理。
保留原始的API大小写,这会影响使用Windows crate的现有代码。族芦通过类似于QueryInterface的函数转换为通用函数,从而可以更安全,更方便地调用许多与COM相关的函数。
环境配置
Window板条箱使用需要首先要在Windows下配置Rust开发环境,还在Rust环境的安装也非常简单傻瓜化。
安装rustup
首先从Rust官方(rust-lang.org)下载安装包rustup-init.exe(记得下载当前Windows对应的32位或者64位版本)。
然后直接执行安装包,安装程序为自动配置好系统路径,以后就可以直接在命令行下使用了,比如cargo包管理器。
安装C++ build tools
Windows下的rust编译还依赖Microsoft C++ build tools工具,不安装,后面在编译时,会报错说“link.exe”无法找到。
需要从微软VS下载出下载vs_buildtools,选中C++工具和Windows SDK组件并安装。
安装VS Code及其Rust插件
另外,为了方便一般建议安装VS Code及其Rust插件:
crates-io国内源
配置Rust 板条箱的国内源,由于官方crates-io国内下载太慢,甚至容易失败,所以先配置国内源(比如ustc)
在用户目录C:\Users\CC\.cargo创建一个config文件,内容配置为:
示例
首先,通过cargo创建一个新的Rust项目:
cargo new hello-chongchong
以上命令这将创建一个新目录并hello-chongchong创建基本项目框架目录和文件。
进入该目录,并使用--lib 命令嵌套创建依赖的库项目:
cargo new --lib bindings
然后通过
code .
在VS Code打开该项目,截图如下:
修改项目Cargo.toml文件中,添加以下依赖项,依赖项告诉Cargo现在它依赖于新创建的win库。
[dependencies]
bindings = {path = " bindings"}
现在,在win文件夹下的Cargo.toml文件中,添加对Windows板条箱的依赖项,版本指定为最新的0.9.1。这样就可以通过允许Cargo打包下载,构建和缓存Windows支持。
[dependencies]
windows = "0.9.1"
[build-dependencies]
windows = "0.9.1"
然后在bindings目录下创建一个新的源文件build.rs,并输入一下源码:
// build.rs
fn main() {
windows::build!(
Windows::Win32::WindowsAndMessaging::MessageBoxA
)
}
在代码中,使用 windows::build 宏指定要使用的类型,可以再次列出需要使用的所API,Windows板条箱将直接元数据生成必要的绑定。
然后修改win/src目录中为以下代码:
windows::include_bindings!()
这样,就可以在主项目main.rs文件中,任意调用指定的Windows API。此处我们创建一个“Hello Chongchong!”消息对话框。
use bindings::Windows::Win32::WindowsAndMessaging::{MessageBoxA, MESSAGEBOX_STYLE}
fn main() {
unsafe {
MessageBoxA(None, "Hello Chongchong!", "Message", MESSAGEBOX_STYLE::MB_OK)
}
}
注意,任何Win32函数和COM接口方法,都需要用unsafe方式调用。
然后通过cargo build编译该项目,并通过cargo run 会d出一下对话框。
新版本的板条箱中再带了几个例子,可以在windows-rs项目仓库的examples目录。
总结
Rust for Windows 给rust在Windows开发应用带来了福音,虽然一些API可能早就被广泛地使用了,但是现在有了官方的支持,可以在文档、示例和稳定性等各方面都有极大的改善。
1、函数简介①、Rust 的函数使用关键字 fn 开头,函数名称使用snake case规范风格(所有字母小写并使用下划线分隔);
②、巧好可以有一系列的输入参数,可以有一个返回值;
③、函数返回可以使用 return 语句,也可以使用表达式(末尾不带分号);
④、函数也可以不写返回类型,这种情况下,编译器会认为返回类型是unit()
⑤、可执行程序的入口是 fn main()
⑥、调用函数时,Rust不关心函数定义在哪(前后都无所谓),只要定义了就行;
⑦、Rust 函数体裤宽亩内可以定义其它模块,比如静态变量、常量、函数、trait、类型等。
2、函数实例
fn main() {
let num = add(1,2)
println!("{}",num)
}
fn add(x:i32,y:i32) ->i32{
x+y
}
登录后复制
3、函数返回值
需要注意语句和表达式的区别,表达式没有分号,有返回值。语句结尾有分号,没有返回值。
所以对于如下函数,如果函数体加上分号,则会报错:
fn add(x:i32,y:i32) ->i32{
x+y
}
登录后复制
把 x+y变胡森成表达式即可(去掉末尾的分号)。
4、发散函数
Rust 支持一种特殊的发散函数(Diverging functions),它的返回类型是感叹号 !。
如果一个函数根本就不能正常返回,那么它就可以这样写:
fn diverges() ->!{
//panic! 会直接导致栈展开,所以这个函数调用后面的代码都不会执行,它的返回类型就是!
panic!("函数不能返回")
}
登录后复制
发散函数的最大特点:可以被转换成任意一个类型。
在Rust 中,有下列情况返回类型都是 !:
1.panic! 以及基于它实现的各种函数/宏,比如unimplemented!、unreachable!
2.死循环loop{}
3.进程退出函数std::process::exit以及类似的libc 中的exec一类函数。
5、const fn
函数可以用 const 关键字修饰,这样的函数可以在编译阶段被编译器执行,返回值也被视为编译期常量。
需要注意的是:const 函数是在编译阶段执行的,因此相比普通函数有很多限制,并非所有的表达式和语句都可以在其中使用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)