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.
C++/WinRT, Windows Çalışma Zamanı (WinRT) API için tamamen standart bir modern C++17 dil projeksiyonudur, başlık dosyası tabanlı bir kütüphane olarak uygulanır ve modern Windows API'sine birinci sınıf erişim sunacak şekilde tasarlanmıştır. C++/WinRT ile, standartlara uyumlu herhangi bir C++17 derleyicisini kullanarak Windows Çalışma Zamanı API'leri yazabilir ve kullanabilirsiniz. Windows SDK'sı C++/WinRT içerir; sürüm 10.0.17134.0 (Windows 10, sürüm 1803) ile kullanıma sunulmuştur.
Tavsiye
C++/WinRT ne zaman seçilir: C++'ta Windows uygulamaları oluşturmanız gerektiğinde (örneğin performans kısıtlamaları çöp toplayıcı gerektirmediğinde, mevcut C++ kitaplıklarıyla birlikte çalışırken veya Windows Çalışma Zamanı bileşenleri yazarken) C++/WinRT kullanın. Projenizde bu gereksinimler yoksa daha hızlı geliştirme ve yerleşik bellek güvenliği için WinUI 3 ile C# kullanmayı göz önünde bulundurun.
C++/WinRT, Microsoft'un C++/CX dil projeksiyonu ve Windows Çalışma Zamanı C++ Şablon Kitaplığı'nın (WRL) yerine önerdiği alternatiftir. C++/WinRT ile ilgili konuların tam listesi, hem C++/CX ve WRL ile birlikte çalışabilirlik hem de bunlardan geçiş yapma hakkında bilgiler içerir.
Önemli
C++/WinRT'nin dikkat edilmesi gereken en önemli parçalarından bazıları C++/WinRT için SDK desteği ve C++/WinRT, XAML, VSIX uzantısı ve NuGet paketi için Visual Studio desteği bölümlerinde açıklanmıştır.
Ayrıca bkz. C++/WinRT örnek uygulamalarını nerede bulabilirim?.
Dil projeksiyonları
Windows Çalışma Zamanı Bileşen Nesne Modeli (COM) API'lerini temel alır ve dil projeksiyonları aracılığıyla erişilecek şekilde tasarlanmıştır. Projeksiyon, COM ayrıntılarını gizler ve belirli bir dil için daha doğal bir programlama deneyimi sağlar.
Windows Çalışma Zamanı API başvuru içeriğindeki C++/WinRT dil projeksiyonu
Windows Çalışma Zamanı API'lere göz atarken sağ üstteki Dil birleşik giriş kutusuna tıklayın ve C++/WinRT dil projeksiyonunda göründükleri şekilde API söz dizimi bloklarını görüntülemek için C++/WinRT'yi seçin.
C++/WinRT, XAML, VSIX uzantısı ve NuGet paketi için Visual Studio desteği
Visual Studio destek için Visual Studio 2022 veya üzeri gerekir. Visual Studio Yükleyicisi'nin içinden Evrensel Windows Platformu geliştirme iş yükünü yükleyin. Yükleme Ayrıntıları>Evrensel Windows Platformu geliştirme bölümünde henüz yapmadıysanız C++ (v14x) Evrensel Windows Platformu araçları seçeneğini işaretleyin. Geliştiricileriçin Windows >> bölümünde Geliştirici modu seçeneğini etkinleştirin.
Uyarı
Visual Studio 2022 ve sonraki sürümler, C++/WinRT proje ve öğe şablonlarının yanı sıra C++/WinRT yansıtılmış türleri için yerel hata ayıklama görselleştirmesini (natvis) yerleşik olarak sunar. daha eski bir Visual Studio sürümü kullanıyorsanız Visual Studio Market'ten C++/WinRT VSIX uzantısını yükleyin.
C++/WinRT için Visual Studio proje şablonları aşağıdaki bölümlerde açıklanmıştır. VSIX uzantısının en son sürümü yüklüyken yeni bir C++/WinRT projesi oluşturduğunuzda, yeni C++/WinRT projesi Microsoft.Windows.CppWinRT NuGet paketini otomatik olarak yükler. Microsoft.Windows. CppWinRT NuGet paketi C++/WinRT derleme desteği (MSBuild özellikleri ve hedefleri) sağlayarak projenizi geliştirme makinesi ile derleme aracısı arasında taşınabilir hale getirir (VSIX uzantısının değil yalnızca NuGet paketinin yüklü olduğu).
Alternatif olarak, Microsoft.Windows.CppWinRT NuGet paketini el ile yükleyerek mevcut bir projeyi dönüştürebilirsiniz. VSIX uzantısının en son sürümünü yükledikten (veya bu sürüme güncelledikten) sonra, mevcut projeyi Visual Studio’da açın, Project>NuGet Paketlerini Yönet...>Gözat seçeneğine tıklayın, arama kutusuna Microsoft.Windows.CppWinRT yazın veya yapıştırın, arama sonuçlarında öğeyi seçin ve ardından paketi bu proje için yüklemek üzere Yükle seçeneğine tıklayın. Paketi ekledikten sonra proje, cppwinrt.exe aracının çağrılması da dahil olmak üzere C++/WinRT MSBuild desteği kazanır.
Önemli
VSIX uzantısının 1.0.190128.4'ten önceki bir sürümüyle oluşturulmuş (veya çalışmak üzere yükseltilen) projeleriniz varsa bkz. VSIX uzantısının önceki sürümleri. Bu bölüm, projelerinizin yapılandırması hakkında önemli bilgiler içerir ve bunları VSIX uzantısının en son sürümünü kullanacak şekilde yükseltmek için bilmeniz gerekir.
- C++/WinRT C++/WinRT, C++17 standardının özelliklerini kullandığından, NuGet paketi Visual Studio'de C/C++>Dil>C++ Dil Standardı>ISO C++17 Standart (/std:c++17) proje özelliğini ayarlar.
- Ayrıca /bigobj derleyici seçeneğini ekler.
-
özelliğini etkinleştirmek için
co_awaitderleyici seçeneğini ekler. - XAML derleyicisine C++/WinRT codegen yaymasını sağlar.
- Uyumluluk modunu da ayarlamak isteyebilirsiniz : Evet (/izin veren-); bu da kodunuzu standartlara uygun olacak şekilde daha da kısıtlar.
- Dikkat edilmesi gereken başka bir proje özelliği de C/C++>Genel>Uyarıları Hata Olarak Değerlendir'dir. Bu ayarı Evet(/WX) veya Hayır (/WX-) olarak ayarlayın. Bazen,
cppwinrt.exearacı tarafından oluşturulan kaynak dosyalar, uygulamanızı bu dosyalara ekleyene kadar uyarılar oluşturabilir.
Sisteminiz yukarıda açıklandığı gibi ayarlandığında, Visual Studio'da bir C++/WinRT projesi oluşturup oluşturabilir veya açabilir ve dağıtabilirsiniz.
2.0 sürümünden itibaren Microsoft.Windows. CppWinRT NuGet paketi aracı cppwinrt.exe içerir.
cppwinrt.exe aracını, C++/WinRT kodundan kullanılmak üzere üst verilerde açıklanan API'leri .winmd üst bilgi dosyası tabanlı standart C++ kitaplığı oluşturmak için bir Windows Çalışma Zamanı üst veri () dosyasına yönlendirebilirsiniz. Windows Çalışma Zamanı meta veriler (.winmd) dosyaları, Windows Çalışma Zamanı API yüzeyini açıklamanın kurallı bir yolunu sağlar.
cppwinrt.exe ögesini meta verilere yönlendirerek, ikinci ya da üçüncü taraf bir Windows Çalışma Zamanı bileşeninde uygulanan veya kendi uygulamanızda uyguladığınız herhangi bir çalışma zamanı sınıfıyla kullanılmak üzere bir kitaplık oluşturabilirsiniz. Daha fazla bilgi için bkz . C++/WinRT ile API'leri kullanma.
C++/WinRT ile, COM stili programlamaya başvurmadan standart C++ kullanarak kendi çalışma zamanı sınıflarınızı da uygulayabilirsiniz. Bir çalışma zamanı sınıfı için türlerinizi yalnızca bir IDL dosyasında tanımlarsınız; midl.exe ve cppwinrt.exe da sizin için uygulama şablonu kaynak kod dosyalarını oluşturur. Alternatif olarak, C++/WinRT temel sınıfından türeterek arabirimleri uygulayabilirsiniz. Daha fazla bilgi için bkz. C++/WinRT ile API yazma.
cppwinrt.exe aracı için proje özellikleri üzerinden ayarlanan özelleştirme seçeneklerinin listesi için Microsoft.Windows.CppWinRT NuGet paketinin readme dosyasına bakın.
Bir projenin C++/WinRT MSBuild desteğini kullandığını, projede Microsoft.Windows.CppWinRT NuGet paketinin yüklü olmasından anlayabilirsiniz.
VSIX uzantısı tarafından sağlanan Visual Studio proje şablonları aşağıda verilmiştir.
Boş Uygulama (C++/WinRT)
XAML kullanıcı arabirimine sahip bir Evrensel Windows Platformu (UWP) uygulaması için proje şablonu. WinUI 3 masaüstü uygulamaları için bunun yerine Paketlenmiş Boş Uygulama (Masaüstünde WinUI 3) şablonunu kullanın.
Visual Studio, her XAML işaretleme dosyasının arkasında yer alan Arabirim Tanım Dili (IDL) (.idl) dosyasından uygulama ve üst bilgi saptamaları oluşturmak için XAML derleyicisi desteği sağlar. Bir IDL dosyasında, uygulamanızın XAML sayfalarında başvurmak istediğiniz tüm yerel çalışma zamanı sınıflarını tanımlayın ve ardından, Generated Files içinde uygulama şablonları ile Generated Files\sources içinde saplama türü tanımları oluşturmak için projeyi bir kez derleyin. Ardından, yerel çalışma zamanı sınıflarınızı uygulamak için referans olarak bu stub tür tanımlarını kullanın. Bkz . Çalışma zamanı sınıflarını Midl dosyalarına (.idl) dönüştürme.
C++/WinRT için Visual Studio'de XAML tasarım yüzeyi desteği C# ile eşliğe yakındır. Visual Studio,Özellikler penceresininOlaylar sekmesini kullanarak bir C++/WinRT projesine olay işleyicileri ekleyebilirsiniz. Ayrıca kodunuza el ile olay işleyicileri de ekleyebilirsiniz. Daha fazla bilgi için bkz. C++/WinRT'de temsilcileri kullanarak olayları işleme .
Çekirdek Uygulama (C++/WinRT)
XAML kullanmayan bir Evrensel Windows Platformu (UWP) uygulaması için proje şablonu. Bu şablonun WinUI 3 eşdeğeri yoktur.
Bunun yerine, Windows.ApplicationModel.Core ad alanı için C++/WinRT Windows ad alanı başlık dosyasını kullanır. Oluşturup çalıştırdıktan sonra, renkli bir kare eklemek için boş bir alana tıklayın; ardından renkli bir kareye tıklayarak sürükleyin.
Windows Konsol Uygulaması (C++/WinRT)
konsol kullanıcı arabirimine sahip Windows Desktop için bir C++/WinRT istemci uygulaması için proje şablonu.
Windows Masaüstü Uygulaması (C++/WinRT)
Win32 MessageBox içinde bir Windows Çalışma Zamanı Windows.Foundation.Uri görüntüleyen Windows Desktop için bir C++/WinRT istemci uygulaması proje şablonu.
Windows Çalışma Zamanı Bileşeni (C++/WinRT)
Bir bileşen için proje şablonu; genellikle Evrensel Windows Platformu (UWP) tarafından kullanılmak üzere.
Bu şablon, IDL'den Windows Çalışma Zamanı meta verilerinin () oluşturulduğu ve ardından uygulama ve üst bilgi saplamalarının Windows Çalışma Zamanı meta verilerinden oluşturulduğu araç zincirini gösterirmidl.exe>cppwinrt.exe..winmd
Bir IDL dosyasında, bileşeninizdeki çalışma zamanı sınıflarını, varsayılan arabirimlerini ve uyguladıkları diğer arabirimleri tanımlayın.
module.g.cpp içindeki module.h.cpp, Generated Files uygulama şablonlarını ve Generated Files\sources içindeki saplama türü tanımlarını oluşturmak için projeyi bir kez derleyin. Ardından, bileşeninizde çalışma zamanı sınıflarını uygulamak için bu taslak tür tanımlarını referans olarak kullanın. Bkz . Çalışma zamanı sınıflarını Midl dosyalarına (.idl) dönüştürme.
Oluşturulan Windows Çalışma Zamanı bileşeninin ikili dosyasını ve .winmd öğesini, bunları kullanan UWP uygulamasıyla birlikte paketleyin.
VSIX uzantısının önceki sürümleri
VSIX uzantısının en son sürümünü yüklemenizi (veya güncelleştirmenizi) öneririz. Varsayılan olarak kendisini güncelleştirecek şekilde yapılandırılır. Bunu yaparsanız ve VSIX uzantısının 1.0.190128.4'ten önceki bir sürümüyle oluşturulmuş projeleriniz varsa, bu bölüm bu projeleri yeni sürümle çalışacak şekilde yükseltme hakkında önemli bilgiler içerir. Güncelleştirmezseniz, bu bölümdeki bilgileri yararlı bulmaya devam edersiniz.
Desteklenen Windows SDK ve Visual Studio sürümleri ve Visual Studio yapılandırma açısından, C++/WinRT, XAML, VSIX uzantısı ve yukarıdaki NuGet paketi için Visual Studio desteğindeki bilgiler VSIX uzantısının önceki sürümleri için geçerlidir. Aşağıdaki bilgiler, önceki sürümlerle oluşturulan (veya çalışmak üzere yükseltilen) projelerin davranışı ve yapılandırmasıyla ilgili önemli farkları açıklar.
1.0.181002.2'den önce oluşturuldu
Projeniz VSIX uzantısının 1.0.181002.2'den önceki bir sürümüyle oluşturulduysa, VSIX uzantısının bu sürümünde C++/WinRT derleme desteği yerleşiktir. Projenizde, <CppWinRTEnabled>true</CppWinRTEnabled> dosyasında .vcxproj özelliği ayarlanmıştır.
<Project ...>
<PropertyGroup Label="Globals">
<CppWinRTEnabled>true</CppWinRTEnabled>
...
Microsoft.Windows.CppWinRT NuGet paketini manuel olarak yükleyerek projenizi yükseltebilirsiniz. VSIX uzantısının en son sürümünü yükledikten (veya bu sürüme yükselttikten) sonra, projenizi Visual Studio’da açın, Project>NuGet Paketlerini Yönet...>Gözat seçeneğine tıklayın, arama kutusuna Microsoft.Windows.CppWinRT yazın veya yapıştırın, arama sonuçlarında ögeyi seçin ve ardından paketi projenize yüklemek için Install seçeneğine tıklayın.
1.0.181002.2 ile 1.0.190128.3 arasında oluşturuldu (veya sürümüne yükseltildi)
Projeniz VSIX uzantısının 1.0.181002.2 ile 1.0.190128.3 (dahil) arasında bir sürümüyle oluşturulduysa, Microsoft.Windows. CppWinRT NuGet paketi proje şablonu tarafından projeye otomatik olarak yüklendi. Bu aralıktaki VSIX uzantısının bir sürümünü kullanmak için eski bir projeyi de yükseltmiş olabilirsiniz. Bunu yaptıysanız, bu aralıktaki VSIX uzantısı sürümlerinde derleme desteği de hâlâ bulunduğundan, yükseltilen projenizde Microsoft.Windows.CppWinRT NuGet paketi yüklü olabilir de olmayabilir de.
Projenizi yükseltmek için önceki bölümdeki yönergeleri izleyin ve projenizde Microsoft.Windows olduğundan emin olun. CppWinRT NuGet paketi yüklü.
Geçersiz yükseltme yapılandırmaları
VSIX uzantısının en son sürümünde, bir projenin <CppWinRTEnabled>true</CppWinRTEnabled> özelliğine sahip olması, Microsoft.Windows.CppWinRT NuGet paketi de yüklü değilse geçerli değildir. Bu yapılandırmaya sahip bir proje, "C++/WinRT VSIX artık proje derleme desteği sağlamıyor." derleme hata iletisini üretir. Lütfen Microsoft.Windows.CppWinRT NuGet paketine bir proje referansı ekleyin.
Yukarıda belirtildiği gibi, bir C++/WinRT projesinde artık NuGet paketinin yüklü olması gerekir.
<CppWinRTEnabled> öğesi artık kullanımdan kaldırılmış olduğundan, isteğe bağlı olarak öğesini .vcxprojdüzenleyebilir ve silebilirsiniz. Bu kesinlikle gerekli değildir, ancak bir seçenektir.
Ayrıca, .vcxproj öğeniz <RequiredBundles>$(RequiredBundles);Microsoft.Windows.CppWinRT</RequiredBundles> içeriyorsa, C++/WinRT VSIX uzantısının kurulu olmasını gerektirmeden derleme yapabilmeniz için bunu kaldırabilirsiniz.
C++/WinRT için SDK desteği
Artık yalnızca uyumluluk nedeniyle mevcut olsa da, sürüm 10.0.17134.0 (Windows 10, sürüm 1803) itibarıyla Windows SDK, birinci taraf Windows API'lerini (Windows ad alanlarına Windows Çalışma Zamanı API'ler) kullanmaya yönelik üst bilgi dosya tabanlı standart bir C++ kitaplığı içerir. Bu başlıklar %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt klasörünün içindedir. Windows SDK sürüm 10.0.17763.0 (Windows 10, sürüm 1809) itibarıyla bu üst bilgiler projenizin $(GeneratedFilesDir) klasörünün içinde sizin için oluşturulur.
Yine uyumluluk amacıyla Windows SDK, cppwinrt.exe aracını da içerir. Ancak, bunun yerine cppwinrt.exe NuGet paketine dahil olan 'nin en güncel sürümünü yükleyip kullanmanızı öneririz. Bu paket ve cppwinrt.exe, yukarıdaki bölümlerde açıklanmıştır.
C++/WinRT projeksiyonunda özel türler
C++/WinRT programlamanızda bazı C++ Standart Kitaplığı veri türleri dahil olmak üzere standart C++ dil özelliklerini ve Standart C++ veri türlerini ve C++/WinRT'yi kullanabilirsiniz. Ancak projeksiyondaki bazı özel veri türlerini de fark edersiniz ve bunları kullanmayı seçebilirsiniz. Örneğin, C++/WinRT kullanmaya başlama'daki hızlı başlangıç kodu örneğinde winrt::hstring kullanıyoruz.
winrt::com_array , belirli bir noktada kullanma olasılığınız olan başka bir türdür. Ancak winrt::array_view gibi bir türü doğrudan kullanma olasılığınız daha düşüktür. Ya da, C++ Standart Kitaplığı'nda bir gün eşdeğer bir tür ortaya çıkarsa, değiştirmeniz gereken hiçbir kodunuz olmaması için onu kullanmamayı seçebilirsiniz.
Warning
C++/WinRT Windows ad alanı üst bilgilerini yakından incelerseniz görebileceğiniz türler de vardır.
Örnek olarak winrt::p aram::hstring verilebilir, ancak koleksiyon örnekleri de vardır. Bunlar yalnızca girdi parametrelerinin bağlanmasını optimize etmek için vardır; ayrıca önemli performans artışları sağlar ve ilgili standart C++ türleri ile kapsayıcıları için çoğu çağrı kalıbının doğrudan sorunsuz çalışmasını mümkün kılar. Bu türler yalnızca en çok değer ekledikleri durumlarda projeksiyon tarafından kullanılır. Bunlar yüksek oranda iyileştirilmiştir ve genel kullanım için değildir; bunları kendiniz kullanmakla cezbedilmemelisiniz.
winrt::impl ad alanındaki hiçbir şeyi de kullanmamalısınız; çünkü bunlar gerçekleme türleridir ve bu nedenle değişebilirler. Standart türleri veya winrt ad alanındaki türleri kullanmaya devam etmelisiniz.
Ayrıca bkz. PARAMETRELERI ABI sınırına geçirme.
Önemli API'ler
İlgili konular
Windows developer