自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Window-rs——用Rust編寫windows原生程序

系統(tǒng) Windows
微軟的最近發(fā)布了Rust for Windows v0.9。更新中包括全面的調(diào)用支持,Rust可以直接原生調(diào)用任何Windows API可以極大的拓展Rust在Windows下的開(kāi)發(fā)能力和范圍。本文我們通過(guò)實(shí)例來(lái)學(xué)習(xí)Rust for Windows(windows-rs) 。

時(shí)下如果語(yǔ)言界要評(píng)選一個(gè)網(wǎng)紅的話,無(wú)疑會(huì)是Rust。Rust憑借著自己出色的安全性和高效性被各大平臺(tái)所接納,Linux內(nèi)核,安卓底層開(kāi)發(fā),Windows底層開(kāi)發(fā)相繼都采納并給出了對(duì)應(yīng)的借口。微軟的Windows也是,最近發(fā)布了Rust for Windows v0.9。更新中包括全面的調(diào)用支持,Rust可以直接原生調(diào)用任何Windows API可以極大的拓展Rust在Windows下的開(kāi)發(fā)能力和范圍。本文我們通過(guò)實(shí)例來(lái)學(xué)習(xí)Rust for Windows(windows-rs) 。

概述

本次更新提供了很多新的特性和更新,根據(jù)官方的信息包括:

  • 添加了對(duì)Win32和COM API的支持,統(tǒng)一了Windows板條箱。這些Windows API有新的項(xiàng)目win32metadata來(lái)添加。為了方便和統(tǒng)一,項(xiàng)目名稱由“Rust/WinRT”更改為“Rust for Windows”。
  • 添加了幾個(gè)示例 ,演示了如何調(diào)用各種Windows API(包括Win32,COM和WinRT API)。
  • Windows 板條箱在crates.io發(fā)布,現(xiàn)在支持MIT或Apache雙開(kāi)源版權(quán)。
  • 內(nèi)置生成的binding,無(wú)需再手動(dòng)編寫。
  • Windows支持在Linux上構(gòu)建。
  • Win32 API的許多改進(jìn)和修復(fù),例如對(duì)數(shù)組類型,各種字符串類型和更新的元數(shù)據(jù)的支持。
  • 添加了對(duì)COM接口的更自然和慣用的支持,例如返回值,以及對(duì)涉及C樣式聯(lián)合和嵌套類型之類的其他API的支持。
  • 縮短了構(gòu)建時(shí)間并改善了錯(cuò)誤處理。
  • 保留原始的API大小寫,這會(huì)影響使用Windows crate的現(xiàn)有代碼。通過(guò)類似于QueryInterface的函數(shù)轉(zhuǎn)換為通用函數(shù),從而可以更安全,更方便地調(diào)用許多與COM相關(guān)的函數(shù)。

環(huán)境配置

Window板條箱使用需要首先要在Windows下配置Rust開(kāi)發(fā)環(huán)境,還在Rust環(huán)境的安裝也非常簡(jiǎn)單傻瓜化。

安裝rustup

首先從Rust官方(rust-lang.org)下載安裝包rustup-init.exe(記得下載當(dāng)前Windows對(duì)應(yīng)的32位或者64位版本)。

然后直接執(zhí)行安裝包,安裝程序?yàn)樽詣?dòng)配置好系統(tǒng)路徑,以后就可以直接在命令行下使用了,比如cargo包管理器。

安裝C++ build tools

Windows下的rust編譯還依賴Microsoft C++ build tools工具,不安裝,后面在編譯時(shí),會(huì)報(bào)錯(cuò)說(shuō)“link.exe”無(wú)法找到。

需要從微軟VS下載出下載vs_buildtools,選中C++工具和Windows SDK組件并安裝。

安裝VS Code及其Rust插件

另外,為了方便一般建議安裝VS Code及其Rust插件:

crates-io國(guó)內(nèi)源

配置Rust 板條箱的國(guó)內(nèi)源,由于官方crates-io國(guó)內(nèi)下載太慢,甚至容易失敗,所以先配置國(guó)內(nèi)源(比如ustc)

在用戶目錄C:\Users\CC\.cargo創(chuàng)建一個(gè)config文件,內(nèi)容配置為:

示例

首先,通過(guò)cargo創(chuàng)建一個(gè)新的Rust項(xiàng)目:

  1. cargo new hello-chongchong 

以上命令這將創(chuàng)建一個(gè)新目錄并hello-chongchong創(chuàng)建基本項(xiàng)目框架目錄和文件。

進(jìn)入該目錄,并使用--lib 命令嵌套創(chuàng)建依賴的庫(kù)項(xiàng)目:

  1. cargo new --lib bindings 

然后通過(guò)

  1. code . 

在VS Code打開(kāi)該項(xiàng)目,截圖如下:

修改項(xiàng)目Cargo.toml文件中,添加以下依賴項(xiàng),依賴項(xiàng)告訴Cargo現(xiàn)在它依賴于新創(chuàng)建的win庫(kù)。

  1. [dependencies] 
  2. bindings = {path = " bindings"

現(xiàn)在,在win文件夾下的Cargo.toml文件中,添加對(duì)Windows板條箱的依賴項(xiàng),版本指定為最新的0.9.1。這樣就可以通過(guò)允許Cargo打包下載,構(gòu)建和緩存Windows支持。

  1. [dependencies] 
  2. windows = "0.9.1" 
  3. [build-dependencies] 
  4. windows = "0.9.1" 

然后在bindings目錄下創(chuàng)建一個(gè)新的源文件build.rs,并輸入一下源碼:

  1. // build.rs 
  2. fn main() { 
  3. windows::build!( 
  4. Windows::Win32::WindowsAndMessaging::MessageBoxA 
  5. ); 

在代碼中,使用 windows::build 宏指定要使用的類型,可以再次列出需要使用的所API,Windows板條箱將直接元數(shù)據(jù)生成必要的綁定。

然后修改win/src目錄中為以下代碼:

  1. windows::include_bindings!(); 

這樣,就可以在主項(xiàng)目main.rs文件中,任意調(diào)用指定的Windows API。此處我們創(chuàng)建一個(gè)“Hello Chongchong!”消息對(duì)話框。

  1. use bindings::Windows::Win32::WindowsAndMessaging::{MessageBoxA, MESSAGEBOX_STYLE}; 
  2. fn main() { 
  3. unsafe { 
  4. MessageBoxA(None, "Hello Chongchong!", "Message", MESSAGEBOX_STYLE::MB_OK); 

注意,任何Win32函數(shù)和COM接口方法,都需要用unsafe方式調(diào)用。

然后通過(guò)cargo build編譯該項(xiàng)目,并通過(guò)cargo run 會(huì)彈出一下對(duì)話框。

新版本的板條箱中再帶了幾個(gè)例子,可以在windows-rs項(xiàng)目倉(cāng)庫(kù)的examples目錄。

總結(jié)

Rust for Windows 給rust在Windows開(kāi)發(fā)應(yīng)用帶來(lái)了福音,雖然一些API可能早就被廣泛地使用了,但是現(xiàn)在有了官方的支持,可以在文檔、示例和穩(wěn)定性等各方面都有極大的改善。

 

責(zé)任編輯:趙寧寧 來(lái)源: 今日頭條
相關(guān)推薦

2023-09-26 19:20:09

微軟開(kāi)源windows

2023-06-19 14:14:24

Rust程序Web

2023-06-23 14:15:09

Rust編程

2021-06-03 07:45:25

Rust Git 終端 UI

2017-08-03 08:34:54

gRPCCRust

2021-04-29 08:00:00

Windows微軟安全

2012-01-09 13:55:35

Java

2011-05-17 14:53:35

C

2011-06-16 10:09:25

QT Windows DLL

2009-08-14 15:06:08

Windows服務(wù)程序

2023-08-31 08:33:57

sudo-rs程序Unix

2023-06-12 08:00:48

Napi-rsRust 前端工具

2024-09-26 15:40:06

2022-02-07 16:40:12

RustGNU Coreut命令

2011-06-27 13:57:42

JavaScript

2009-10-21 09:28:34

Windows 7程序鎖

2024-06-10 23:07:05

2011-11-23 09:06:00

2023-09-25 15:30:14

云原生云計(jì)算

2024-01-08 13:31:00

Rust自動(dòng)化測(cè)試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)