Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önceki konu başlığında Windows için Rust tanıtıldı ve Windows kütüphanesi.
Şimdi Gerçekten Basit Dağıtım (RSS) akışından blog gönderilerinin başlıklarını indiren basit bir konsol uygulaması yazarak Windows için Rust'ı deneyelim.
Bir komut istemi (
cmd.exe) başlatın ve Rust projelerinizi saklamak istediğiniz klasörecdyapın.Cargo kullanarak rss_readeradlı yeni bir Rust projesi oluşturun ve yeni oluşturulan klasörde
cdyapın:> cargo new rss_reader > Created binary (application) `rss_reader` package > cd rss_readerArdından rss_reader projesini VS Code'da açın.
code .Şimdi ana rss_reader projesini uygulayalım. İlk olarak, projenin kökündeki dosyayı açın
Cargo.toml.Cargo.tomlDosya, sahip olduğu bağımlılıklar da dahil olmak üzere Rust projesini açıklayan bir metin dosyasıdır.Aşağıdaki listede gösterildiği gibi pencere kasasına bir bağımlılık ekleyin. Windows kasası büyük. Derleme sürelerini hızlı tutmak için yalnızca
Foundation_Collectionsbu kod için ihtiyacımız olan veWeb_Syndicationözelliklerini seçeceğiz.# Cargo.toml ... [dependencies.windows] version = "0.43.0" features = [ "Foundation_Collections", "Web_Syndication", ]Ardından , rss_reader projenin
src/main.rskaynak kodu dosyasını açın. Burada Kargo varsayılan "Merhaba, dünya!" kodunu bulacaksınız. aşağıdaki deyiminimain.rsbaşına ekleyin:// src\main.rs use windows::{ core::*, Foundation::Uri, Web::Syndication::SyndicationClient }; fn main() { println!("Hello, world!"); }kullanımı bildirimi, kullanacağımız türlerin yolunu kısaltır. Daha önce bahsettiğimiz Uri türü var.
Yeni bir Uri oluşturmak için Kargo'nun varsayılan ana işlevini şu değerle değiştirin:
// src\main.rs ... fn main() -> Result<()> { let uri = Uri::CreateUri(h!("https://blogs.windows.com/feed"))?; Ok(()) }ana işlevinin dönüş türünün windows::core::içerisindeki Resultolduğunu unutmayın. Bu, işletim sistemi (OS) API'lerinden gelen hatalarla başa çıkmak yaygın olduğu için işleri kolaylaştırır. windows::core::Result hata yayılması ve özlü hata işleme konusunda bize yardımcı olur.
Kod satırının sonunda soru işareti işlecini görebilirsiniz. Yazmadan tasarruf etmek için Rust'ın hata yayma ve kısa devre mantığını kullanmak için bunu yaparız. Bu, bu basit örnek için el ile hata işleme yapmak zorunda olmadığımız anlamına gelir. Rust'ın bu özelliği hakkında daha fazla bilgi için bkz. Kolay hata yönetimi için ? işlecisi.
Ayrıca h! makrosunu Windows kasasından dikkat edin. Rust dizgi sabitinden HSTRING referansı oluşturmak için bunu kullanırız. WinRT API, dize değerleri için HSTRING'i kapsamlı bir şekilde kullanır.
RSS akışını indirmek için yeni bir SyndicationClient oluşturacağız.
// src\main.rs ... fn main() -> windows::core::Result<()> { let uri = Uri::CreateUri(h!("https://blogs.windows.com/feed"))?; let client = SyndicationClient::new()?; Ok(()) }Yeni işlevi bir Rust oluşturucusudur. pencereler kasasındaki tüm nesneler Rust kuralını izler ve oluşturucuları yeniolarak adlandırılır.
Artık akışı almak için SyndicationClient'ı kullanabiliriz.
// src\main.rs ... fn main() -> windows::core::Result<()> { let uri = Uri::CreateUri(h!("https://blogs.windows.com/feed"))?; let client = SyndicationClient::new()?; let feed = client.RetrieveFeedAsync(&uri)?.get()?; Ok(()) }RetrieveFeedAsync zaman uyumsuz bir API olduğundan, örneği basit tutmak için engelleme get işlevini kullanırız. Alternatif olarak, sonuçları işbirliği içinde beklemek amacıyla bir
awaitişlevi içindekiasyncişlecini kullanabiliriz. Grafik kullanıcı arabirimine sahip daha karmaşık bir uygulama sık sık kullanırasync.Şimdi sonuçta elde edilen öğeleri yineleyebilir ve yalnızca başlıkları yazdırabiliriz. Bazı RSS akışları bunu gerektirdiğinden, kullanıcı aracısı üst bilgisini ayarlamak için aşağıda birkaç ek kod satırı da görürsünüz.
// src\main.rs ... fn main() -> windows::core::Result<()> { let uri = Uri::CreateUri(h!("https://blogs.windows.com/feed"))?; let client = SyndicationClient::new()?; client.SetRequestHeader( h!("User-Agent"), h!("Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)"), )?; let feed = client.RetrieveFeedAsync(&uri)?.get()?; for item in feed.Items()? { println!("{}", item.Title()?.Text()?); } Ok(()) }Şimdi Çalıştır>Hata Ayıklamadan Çalıştır 'a tıklayarak (veya Ctrl+F5) basarak oluşturup çalıştırabildiğimizi onaylayalım. Eğer beklenmedik mesajlar görürseniz, VS Code ile Rust kullanarak Hello, world! öğreticisini başarıyla tamamladığınızdan emin olun.
Ayrıca metin düzenleyicisine eklenmiş Hata Ayıklama ve Çalıştır komutları da vardır. Alternatif olarak,
rss_readerklasöründeki bir komut istemindecargo runyazın; bu, programı derleyip çalıştıracaktır.
VS Code Terminal bölmesinde, Cargo'nun Windows işletim sistemi paketini başarıyla indirdiğini ve derlediğini, sonuçları önbelleğe alarak, böylece sonraki derlemelerin daha kısa sürede tamamlanmasını sağlamak için kullanmakta olduğunu görebilirsiniz. Ardından örneği oluşturur ve çalıştırarak blog gönderisi başlıklarının listesini görüntüler.
Bu, Windows için Rust'ı programlamak kadar basittir. Bununla birlikte, arka planda, Rust'ın .winmd (Ortak Dil Altyapısı veya CLI) temelinde dosyalarını ayrıştırabilmesi ve çalışma zamanında COM tabanlı uygulama ikili arabirimine (ABI) güvenlik ve verimlilik ön planda tutularak sadık kalabilmesi için araçları geliştirmeye büyük bir özen gösterilir.
İleti kutusunu gösterme
Windows için Rust'ın herhangi bir Windows API'sini (geçmiş, mevcut ve gelecek) çağırmanıza olanak tanır dedik. Bu nedenle bu bölümde birkaç Windows ileti kutusu göstereceğiz.
RSS projesinde yaptığımız gibi, komut isteminde
cdkomutunu kullanarak Rust projelerinizin bulunduğu klasöre gidin.message_box adlı yeni bir proje oluşturun ve bunu VS Code'da açın:
> cargo new message_box > Created binary (application) `message_box` package > cd message_box > code .VS Code'da dosyasını açın
Cargo.tomlve bu proje için Windows bağımlılıklarını ekleyin:# message_box\Cargo.toml ... [dependencies.windows] version = "0.43.0" features = [ "Win32_Foundation", "Win32_UI_WindowsAndMessaging", ]Şimdi projenin
src/main.rsdosyasını açın ve aşağıda gösterildiği gibi yeni ad alanlarıylausebildirimlerini ekleyin. Son olarak, MessageBoxA ve MessageBoxW işlevlerini çağırmak için kod ekleyin. Windows API belgeleri çoğunlukla C/C++ göz önünde bulundurularak yazılır, bu nedenle API belgelerini windows kasasında Rust projeksiyonları için belgelerle karşılaştırmak yararlı olur: MessageBoxA (Rust) ve MessageBoxW (Rust).// src\main.rs use windows::{ core::*, Win32::UI::WindowsAndMessaging::* }; fn main() { unsafe { MessageBoxA(None, s!("Ansi"), s!("World"), MB_OK); MessageBoxW(None, w!("Wide"), w!("World"), MB_OK); } }Gördüğünüz gibi, bu Win32 API'lerini bir
unsafeblokta kullanmamız gerekir (bkz . Güvenli olmayan bloklar). Ayrıcanot edin! vew! rust UTF-8 dize değişmez değerlerinden LPCSTR makrolar; aynıve LPCWSTR bağımsız değişkenleri h ile bir . Rust, UTF-8 dizeleriyle doğal olarak Unicode olduğundan, ANSI (A-soneki) API'ler yerine geniş Unicode (W-soneki) Windows API'lerinin kullanılması tercih edilir. Kodunuzda İngilizce olmayan metinler kullanıyorsanız bu önemli olabilir.HSTRING oluşturduğumuz gibi!rss_reader için makro
Bu kez oluşturup çalıştırdığınızda Rust iki Windows ileti kutusu görüntüler.
İlgili
Windows developer