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, üst bilgi dosyası tabanlı bir kitaplık olarak uygulanan ve modern Windows API'sine birinci sınıf erişim sağlamak üzere tasarlanmış, Windows Çalışma Zamanı (WinRT) API'leri için tamamen standart bir modern C++17 dil projeksiyonudur. 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.
C++/WinRT, Microsoft'un C++/CX dil projeksiyonu ve Windows Çalışma Zamanı C++ Şablon Kitaplığı (WRL)için önerilen değişimidir. C++/WinRT hakkındaki
Önemli
C++/WinRT'nin dikkat edilmesi gereken en önemli parçalarından bazıları, C++/WinRT için SDK desteği
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
Windows Çalışma Zamanı API'si başvuru içeriğindeki C++/WinRT dil projeksiyonu
Windows Çalışma Zamanı API'lerinegöz atarken, sağ üstteki Dil birleşik giriş kutusuna tıklayın ve API söz dizimi bloklarını C++/WinRT dil projeksiyonunda göründükleri şekilde görüntülemek için C++/WinRT'i seçin.
C++/WinRT, XAML, VSIX uzantısı ve NuGet paketi için Visual Studio desteği
Visual Studio desteği için Visual Studio 2022, Visual Studio 2019 veya Visual Studio 2017 (en az sürüm 15.6; en az 15.7 önerilir) gerekir. Visual Studio Yükleyicisi'nin içinden Evrensel Windows Platformu geliştirme iş yükünü yükleyin. Evrensel Windows Platformu geliştirme
Visual Studio ve Windows SDK'nın en son sürümleriyle geliştirmenizi öneririz. 10.0.17763.0 (Windows 10, sürüm 1809) tarihinden önce Windows SDK ile birlikte gönderilen bir C++/WinRT sürümü kullanıyorsanız, yukarıda belirtilen Windows ad alanı üst bilgilerini kullanmak için 10.0.17134.0 projenizde en düşük Windows SDK hedef sürümüne (Windows 10, sürüm 1803).
Visual Studio 2022, C++/WinRT projesi ve öğe şablonları yerleşik olarak sunulur, böylece C++/WinRT geliştirmeye hemen başlayabilirsiniz. Ayrıca C++/WinRT öngörülen türlerin Visual Studio yerel hata ayıklama görselleştirmesi (natvis) ile birlikte gelir; C# hata ayıklamasına benzer bir deneyim sağlar. Natvis, hata ayıklama derlemeleri için otomatiktir. Daha fazla bilgi için bkz. C++/WinRT için Visual Studio yerel hata ayıklama görselleştirmesi.
Visual Studio'nun eski sürümleri için, Visual Studio Market'ndan C++/WinRT Visual Studio Uzantısı (VSIX) en son sürümünü indirip yüklemek isteyeceksiniz.
- VSIX uzantısı, Visual Studio'da C++/WinRT proje ve öğe şablonları sağlar.
- Ayrıca, Visual Studio'nun C++/WinRT projeksiyon türleri için yerel hata ayıklama görselleştirmesini (natvis) size sunar.
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ü yeni bir C++/WinRT projesi oluşturduğunuzda, yeni C++/WinRT projesi Microsoft.Windows.CppWinRT NuGet paketiniotomatik 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 var olan bir projeyi dönüştürebilirsiniz. VSIX uzantısının en son sürümünü yükledikten (veya güncelleştirdikten) sonra, var olan projeyi Visual Studio'da açın, NuGet Paketlerini Yönetcppwinrt.exe
aracını çağırma dahil olmak üzere proje için C++/WinRT MSBuild desteği alırsınız.
Ö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'da 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.
-
etkinleştirmek için
co_await
derleyici seçeneğini ekler. - XAML derleyicisine C++/WinRT codegen yaymasını sağlar.
- Uyumluluk modunu da ayarlamak isteyebilirsiniz: Evet (/izin verilen-), 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ı Hatalar Olarak İşle. Bunu tada göre Evet(/WX) veya Hayır (/WX-) olarak ayarlayın. Bazen,
cppwinrt.exe
aracı tarafından oluşturulan kaynak dosyalar, uygulamanızı bunlara ekleyene kadar uyarılar oluşturur.
Sisteminiz yukarıda açıklandığı gibi ayarlandıysa, Visual Studio'da bir C++/WinRT projesi oluşturup oluşturabilir veya açabilir ve dağıtabilirsiniz.
Sürüm 2.0'da Microsoft.Windows.CppWinRT NuGet paketi cppwinrt.exe
aracını içerir. C++/WinRT kodundan kullanılmak üzere meta verilerde açıklanan API'leri projeleri .winmd
) dosyaları, Windows Çalışma Zamanı API'sinin yüzeyini açıklamanın kurallı bir yolunu sağlar. Meta verilere cppwinrt.exe
işaret ederek, ikinci veya üçüncü taraf bir Windows Çalışma Zamanı bileşeninde veya kendi uygulamanızda uygulanan herhangi bir çalışma zamanı sınıfı ile kullanmak üzere bir kitaplık oluşturabilirsiniz. Daha fazla bilgi için C++/WinRT ile API'leri kullanmabölümüne bakın.
C++/WinRT ile, COM stili programlamaya başvurmadan standart C++ kullanarak kendi çalışma zamanı sınıflarınızı da uygulayabilirsiniz. Çalışma zamanı sınıfı için, türlerinizi bir IDL dosyasında açıklarsınız, ardından midl.exe
ve cppwinrt.exe
uygulama şablon kaynak kodu dosyalarınızı sizin için oluşturur. Alternatif olarak, C++/WinRT temel sınıfından türeterek arabirimleri uygulayabilirsiniz. Daha fazla bilgi için bkz. C++/WinRT ile Yazma API'leri.
cppwinrt.exe
aracının, proje özellikleri aracılığıyla ayarlanan özelleştirme seçeneklerinin listesi için Microsoft.Windows.CppWinRT NuGet paketi , README'ye bakın.
C++/WinRT MSBuild desteğini kullanan bir projeyi, proje içinde yüklü Microsoft.Windows.CppWinRT NuGet paketinin varlığıyla tanımlayabilirsiniz.
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.
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 saplamaları oluşturmak için XAML derleyicisi desteği sağlar. Bir IDL dosyasında, uygulamanızın XAML sayfalarında başvurmak istediğiniz yerel çalışma zamanı sınıflarını tanımlayın ve ardından Generated Files
'da uygulama şablonlarını ve Generated Files\sources
'de kalıp tür tanımlarını oluşturmak için projeyi bir kez derleyin. Ardından, yerel çalışma zamanı sınıflarınızı uygulamak için bu gövde türü tanımlamaları referans olarak kullanın. Bkz. Çalışma zamanı sınıflarının Midl dosyalarına (.idl) ayrıştırılması.
C++/WinRT için Visual Studio'daki XAML tasarım yüzeyi desteği C# ile eşliğe yakındır. Visual Studio'da, bir C++/WinRT projesine olay işleyicileri eklemek için Özellikler penceresinin Olaylar sekmesini kullanabilirsiniz. Ayrıca kodunuza el ile olay işleyicileri de ekleyebilirsiniz. Daha fazla bilgi için bkz. C++/WinRT'da temsilcileri kullanarak olayları işleme
Çekirdek Uygulama (C++/WinRT)
XAML kullanmayan bir Evrensel Windows Platformu (UWP) uygulaması için proje şablonu.
Bunun yerine, Windows.ApplicationModel.Core ad alanı için C++/WinRT Windows ad alanı üst bilgisini 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)
Windows Masaüstü için konsol kullanıcı arabirimine sahip bir C++/WinRT istemci uygulaması için proje şablonu.
Windows Masaüstü Uygulaması (C++/WinRT)
Windows Masaüstü için C++/WinRT istemci uygulaması proje şablonu, bir Win32 MessageBoxiçinde Windows Çalışma Zamanı Windows.Foundation.Uri görüntüler.
Windows Çalışma Zamanı Bileşeni (C++/WinRT)
Bir bileşen için proje şablonu; genellikle Evrensel Windows Platformu'ndan (UWP) tüketim için.
Bu şablon, IdL'den Windows Çalışma Zamanı meta verilerinin (midl.exe
) oluşturulduğu ve ardından Windows Çalışma Zamanı meta verilerinden uygulama ve üst bilgi saplamalarının oluşturulduğu >cppwinrt.exe
.winmd
araç zincirini gösterir.
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
, module.h.cpp
, Generated Files
'de uygulama şablonlarını ve Generated Files\sources
'te taslak tür tanımlarını oluşturmak için projeyi bir kez derleyin ve çalıştırın. Ardından, bileşeninizde çalışma zamanı sınıflarını uygulamak için saplama türü tanımlarını referans olarak kullanın. Bkz. Çalışma zamanı sınıflarının Midl dosyalarına (.idl) ayrıştırılması.
Oluşturulmuş Windows Çalışma Zamanı bileşeninin ikili dosyasını ve .winmd
'ı bunları tüketen 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 sürümüne 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ırması açısından, yukarıdaki C++/WinRT, XAML, VSIX uzantısı ve NuGet paketi bölümü için
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 el ile yükleyerek projenizi yükseltebilirsiniz. VSIX uzantısının en son sürümünü yükledikten (veya sürümüne yükselttikten) sonra projenizi Visual Studio'da açın, Proje
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, proje şablonu tarafından projeye otomatik olarak Microsoft.Windows.CppWinRT NuGet paketi
Projenizi yükseltmek için önceki bölümdeki yönergeleri izleyin ve projenizde Microsoft.Windows.CppWinRT NuGet paketinin yüklü olduğundan emin olun.
Geçersiz yükseltme yapılandırmaları
VSIX uzantısının en son sürümüyle, microsoft.windows.CppWinRT NuGet paketi de yüklü değilse projenin
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 .vcxproj
düzenleyebilir ve öğesini silebilirsiniz. Kesinlikle gerekli değildir, ancak bu bir seçenektir.
Ayrıca, .vcxproj
<RequiredBundles>$(RequiredBundles);Microsoft.Windows.CppWinRT</RequiredBundles>
içeriyorsa, C++/WinRT VSIX uzantısının yüklenmesine gerek kalmadan derlemek 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'sı birinci taraf Windows API'lerini (Windows ad alanında Windows Çalışma Zamanı API'leri) kullanmaya yönelik üst bilgi dosyası tabanlı standart bir C++ kitaplığı içerir. Bu üst bilgiler %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.
Uyumluluk için windows SDK'sı da cppwinrt.exe
aracıyla birlikte gelir. Ancak, bunun yerine cppwinrt.exe
NuGet paketiyle birlikte gelen en son sürümünü yüklemenizi ve 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 standart C++ dil özelliklerini ve bazı C++ Standart Kitaplık veri türleri dahil olmak üzere Standart C++ veri türlerini ve C++/WinRT
winrt::com_array, belirli bir noktada kullanma olasılığınız olan başka bir türdür. Ancak winrt::array_viewgibi bir türü doğrudan kullanma olasılığınız daha düşüktür. Alternatif olarak, C++ Standart Kitaplığı'nda eşdeğer bir tür belirdiğinde değiştirilmesi gereken bir kodunuz olmaması için bu kodu kullanmamayı seçebilirsiniz.
Uyarı
C++/WinRT Windows ad alanı üst bilgilerini yakından incelerseniz görebileceğiniz türler de vardır. Örnek olarak winrt::param::hstringverilebilir, ancak koleksiyon örnekleri de vardır. Bunlar yalnızca giriş parametrelerinin bağlanmasını optimize etmek için var ve önemli performans iyileştirmeleri sağlarlar, ayrıca ilgili standart C++ türleri ve kapsayıcılar için çoğu çağrı deseninin sorunsuz çalışmasını sağlarlar. 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. Bunlar uygulama türleri olduğundan ve bu nedenle değiştirilebilir olduğundan, winrt::impl
ad alanından herhangi bir şey de kullanmamalısınız. standart türleri veya winrt ad alanıtürleri kullanmaya devam etmelisiniz.
Ayrıca bkz. Parametreleri ABI sınırına geçirme.
Önemli API'ler
- winrt::hstring yapısı
- winrt ad alanı