趣文网,分享全网好句子、好文章!

用Rust语言和编写windows原生程序

时间:2023-09-09 03:33:02

相关推荐

用Rust语言和编写windows原生程序

时下如果语言界要评选一个网红的话,无疑会是Rust。Rust凭借着自己出色的安全性和高效性被各大平台所接纳,Linux内核,安卓底层开发,Windows底层开发相继都采纳并给出了对应的借口。微软的Windows也是,最近发布了Rust for Windows(windows-rs) v 0.9。更新中包括全面的调用支持,Rust可以直接原生调用任何Windows API可以极大的拓展Rust在Windows下的开发能力和范围。本文我们通过实例来学习Rust for Windows 。

概述

本次更新提供了很多新的特性和更新,根据官方的信息包括:

添加了对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:UsersCC.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 会弹出一下对话框。

新版本的板条箱中再带了几个例子,可以在windows-rs项目仓库的examples目录。

总结

Rust for Windows 给rust在Windows开发应用带来了福音,虽然一些API可能早就被广泛地使用了,但是现在有了官方的支持,可以在文档、示例和稳定性等各方面都有极大的改善。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
显示评论内容(3)
  1. EYEBLISS2024-01-20 23:34EYEBLISS[香港网友]60.233.79.129
    Rust语内存安全性确实让人放心编写windows原生程序也会更可靠吧。
    顶14踩0
  2. 玉月亮2023-12-07 08:53玉月亮[福建省网友]1.13.29.133
    听Rust语有很强并发能力编写windows原生程序定会更高效。
    顶0踩0
  3. 海棠无香2023-10-23 18:13海棠无香[湖北省网友]203.148.65.190
    太棒了Rust语性能和安全性让它成为编写windows原生程序绝佳选择。
    顶0踩0
相关阅读
Windows XP升级指南:升级方法和效果对比

Windows XP升级指南:升级方法和效果对比

检查当前硬件:检查当前台式电脑情况,包括CPU、内存、显卡等硬件是否可以满足新系统的运行要求,在装系统之前最好先把台式电脑里所有的外设都连上,以保证装完系统硬件设备能...

2024-01-24

解决联想重装系统后卡在Windows界面的问题

解决联想重装系统后卡在Windows界面的问题

联想重装系统后卡在windows界面是指在联想电脑进行系统重装后,出现在Windows启动界面上卡住无法进入系统的问题。这可能是由于系统安装过程中出现错误、驱动程序不兼容或硬件故障...

2024-01-25

「GCTT 出品」关于结构化并发的笔记——Go 语言中有害的声明语句

「GCTT 出品」关于结构化并发的笔记——Go 语言中有害的声明语句

上面的例子是以并发的方式运行 myfunc 以便使用程序空闲的资源,并且调用后立马回到父进程或主线程去做其他事情

2023-09-18

Unicode 算法漏洞“Trojan Source”几乎影响所有编程语言

Unicode 算法漏洞“Trojan Source”几乎影响所有编程语言

bidi 双向算法设计之初是用于处理不同语言的文字排序问题,比如将阿拉伯语单词从右到左阅读写入英语句子从左到右

2023-12-15