Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
C++/WinRT je zcela standardní moderní projekce jazyka C++17 pro rozhraní API prostředí Windows Runtime (WinRT), implementovaná jako knihovna založená na hlavičkách a navržená tak, aby vám poskytovala prvotřídní přístup k modernímu rozhraní API systému Windows. Pomocí C++/WinRT můžete vytvářet a využívat rozhraní API prostředí Windows Runtime pomocí libovolného kompilátoru C++17 kompatibilního se standardy. Sada Windows SDK obsahuje C++/WinRT; byla zavedena ve verzi 10.0.17134.0 (Windows 10 verze 1803).
C++/WinRT je doporučená náhrada jazyka C++/CX
Důležité
Některé z nejdůležitějších částí C++/WinRT, o nichž je potřeba vědět, jsou popsány v částech podpory sady SDK pro C++/WinRT a Visual Studio pro C++/WinRT, XAML, rozšíření VSIX a balíček NuGet.
Podívejte se také na Kde najdu ukázkové aplikace C++/WinRT?.
Jazykové projekce
Modul Windows Runtime je založený na rozhraních API modelu COM (Component Object Model) a je navržený tak, aby byl přístupný prostřednictvím projekcí jazyka. Projekce skryje podrobnosti modelu COM a poskytuje přirozenější programovací prostředí pro daný jazyk.
Projekce jazyka C++/WinRT v referenčním obsahu rozhraní API prostředí Windows Runtime
Při procházení rozhraními API prostředí Windows Runtimeklikněte v pravém horním rohu na kombinované pole Jazyk, vyberte C++/WinRT a zobrazte bloky syntaxe rozhraní API tak, jak se zobrazují v projekci C++/WinRT.
Podpora sady Visual Studio pro C++/WinRT, XAML, rozšíření VSIX a balíček NuGet
Pro podporu sady Visual Studio budete potřebovat Visual Studio 2022 nebo Visual Studio 2019 nebo Visual Studio 2017 (alespoň verze 15.6; doporučujeme aspoň 15.7). Z instalačního programu sady Visual Studio nainstalujte úlohu vývoje pro univerzální platformu Windows
I když doporučujeme vyvíjet s využitím nejnovějších verzí sady Visual Studio a sady Windows SDK, Pokud používáte verzi C++/WinRT, která se dodává se sadou Windows SDK před verzí 10.0.17763.0 (Windows 10 verze 1809), budete k použití výše uvedených hlaviček oborů názvů Systému Windows potřebovat minimální cílovou verzi sady Windows SDK ve vašem projektu 10.0.17134.0 (Windows 10, verze 1803).
Visual Studio 2022 se dodává s integrovanými šablonami projektů a položek C++/WinRT, abyste mohli hned začít s vývojem C++/WinRT. Dodává se také s nativní vizualizací ladění pro Visual Studio (natvis) promítaných typů C++/WinRT, což poskytuje zážitek podobný ladění v jazyce C#. Natvis je u ladicích sestavení automatický. Další informace najdete v tématu nativní vizualizace ladění sady Visual Studio pro C++/WinRT.
U starších verzí sady Visual Studio si budete chtít stáhnout a nainstalovat nejnovější verzi rozšíření sady C++/WinRT Visual Studio (VSIX) ze sady Visual Studio Marketplace.
- Rozšíření VSIX poskytuje šablony projektů a položek jazyka C++/WinRT v sadě Visual Studio.
- Kromě toho poskytuje nativní vizualizaci ladění sady Visual Studio (natvis) projektovaných typů C++/WinRT.
Šablony projektů sady Visual Studio pro C++/WinRT jsou popsány v následujících částech. Když vytvoříte nový projekt C++/WinRT s nainstalovanou nejnovější verzí rozšíření VSIX, nový projekt C++/WinRT automaticky nainstaluje balíček NuGet Microsoft.Windows.CppWinRT. Balíček NuGet Microsoft.Windows.CppWinRT poskytuje podporu sestavení C++/WinRT (vlastnosti a cíle MSBuild), což umožňuje přenositelný projekt mezi vývojovým počítačem a agentem sestavení (na kterém je nainstalovaný pouze balíček NuGet, nikoli rozšíření VSIX).
Můžete také převést existující projekt ruční instalací balíčku NuGet Microsoft.Windows.CppWinRT . Po instalaci (nebo aktualizaci na) nejnovější verzi rozšíření VSIX otevřete existující projekt v sadě Visual Studio a klikněte na Projekt>Spravovat balíčky NuGet...>Vyhledat, zadejte nebo vložte Microsoft.Windows.CppWinRT do vyhledávacího pole, vyberte položku ve výsledcích vyhledávání a poté klikněte na Instalovat, abyste balíček pro tento projekt nainstalovali. Po přidání balíčku získáte podporu C++/WinRT MSBuild pro projekt, včetně vyvolání cppwinrt.exe nástroje.
Důležité
Pokud máte projekty vytvořené pomocí (nebo upgradované k práci s) verzí rozšíření VSIX starší než 1.0.190128.4, podívejte se na Starší verze rozšíření VSIX. Tato část obsahuje důležité informace o konfiguraci projektů, o kterých budete potřebovat vědět, abyste je mohli upgradovat, aby používaly nejnovější verzi rozšíření VSIX.
- Vzhledem k tomu, že C++/WinRT používá funkce ze standardu C++17, nastaví balíček NuGet vlastnost projektu C/C++>jazyk>jazykový standard C++>standard ISO C++17 (/std:c++17) v sadě Visual Studio.
- Přidá také možnost kompilátoru /bigobj .
- Přidá možnost kompilátoru /await , aby bylo možné povolit
co_await. - Dává kompilátoru XAML pokyn, aby vygeneroval kód C++/WinRT.
- Můžete také chtít nastavit režim shody: Ano (/permissive-), což dále omezuje váš kód na dodržování standardů.
- Další vlastností projektu, o které je potřeba vědět, je C/C++>Obecné>Zacházejte s varováními jako s chybami. Nastavte toto na Ano(/WX) nebo Ne (/WX-) podle potřeby. Někdy zdrojové soubory vygenerované
cppwinrt.exenástrojem generují upozornění, dokud do nich nepřidáte implementaci.
Když máte systém nastavený, jak je popsáno výše, budete moct vytvořit a sestavit nebo otevřít projekt C++/WinRT v sadě Visual Studio a nasadit ho.
Od verze 2.0 balíček Microsoft.Windows.CppWinRT NuGet obsahuje nástroj cppwinrt.exe. Nástroj cppwinrt.exe můžete nasměrovat na soubor metadat prostředí Windows Runtime (.winmd) a vygenerovat standardní knihovnu C++ založenou na souborech záhlaví, která projekty rozhraní API popsaná v metadatech k využití z kódu C++/WinRT. Soubory metadat prostředí.winmd Windows Runtime poskytují kanonický způsob popisu povrchu rozhraní API prostředí Windows Runtime. Když nasměrujete cppwinrt.exe na metadata, můžete vygenerovat knihovnu pro použití s libovolnou třídou modulu runtime implementovanou v komponentě Windows Runtime druhé nebo třetí strany nebo implementovanou ve vaší vlastní aplikaci. Další informace najdete v tématu Používání rozhraní API pomocí C++/WinRT.
S jazykem C++/WinRT můžete také implementovat vlastní třídy modulu runtime pomocí standardního jazyka C++, aniž byste se museli uchylovat k programování ve stylu modelu COM. Pro běhovou třídu stačí popsat typy v souboru IDL a midl.exe a cppwinrt.exe vygenerují šablonovité zdrojové soubory kódu za vás. Alternativně můžete implementovat rozhraní odvozením ze základní třídy C++/WinRT. Další informace najdete v tématu API pro autory v jazyce C++/WinRT.
Seznam možností přizpůsobení pro cppwinrt.exe nástroj, který je nastavený prostřednictvím vlastností projektu, naleznete v souboru Readme balíčku NuGet Microsoft.Windows.CppWinRT.
Projekt, který používá podporu C++/WinRT MSBuild, můžete identifikovat přítomností balíčku NuGet Microsoft.Windows.CppWinRT nainstalovaného v rámci projektu.
Tady jsou šablony projektů sady Visual Studio poskytované rozšířením VSIX.
Prázdná aplikace (C++/WinRT)
Šablona projektu pro aplikaci univerzální platformy Windows (UPW), která má uživatelské rozhraní XAML.
Visual Studio poskytuje podporu kompilátoru XAML pro generování procedur implementace a hlaviček ze souboru IDL (.idlInterface Definition Language), který se nachází za každým souborem kódu XAML. V souboru IDL definujte všechny lokální třídy běhového modulu, na které chcete odkazovat na XAML stránkách vaší aplikace, a pak projekt sestavte, aby se vygenerovaly šablony pro implementaci v Generated Filesa definice zástupných typů v Generated Files\sources. Pak použijte tyto definice typů zástupců jako referenci pro implementaci vašich místních tříd runtime. Vizte Dělení tříd za běhu do souborů MIDL (.idl).
Podpora návrhové plochy XAML v sadě Visual Studio pro C++/WinRT se blíží paritě s jazykem C#. V sadě Visual Studio můžete pomocí karty Události okna Vlastnosti přidat obslužné rutiny událostí v projektu C++/WinRT. Obslužné rutiny událostí můžete do kódu přidat ručně – další informace najdete v tématu Zpracování událostí pomocí delegátů v C++/WinRT .
Základní aplikace (C++/WinRT)
Šablona projektu pro aplikaci univerzální platformy Windows (UPW), která nepoužívá XAML.
Místo toho používá hlavičku oboru názvů windows C++/WinRT pro obor názvů Windows.ApplicationModel.Core. Po sestavení a spuštění klikněte na prázdné místo a přidejte barevný čtverec; potom kliknutím na barevný čtverec přetáhněte.
Konzolová aplikace systému Windows (C++/WinRT)
Šablona projektu pro klientskou aplikaci C++/WinRT pro Desktop pro Windows s uživatelským rozhraním konzoly.
Desktopová aplikace windows (C++/WinRT)
Šablona projektu pro klientskou aplikaci C++/WinRT pro plochu Windows, která zobrazuje Windows Runtime Windows.Foundation.Uri uvnitř Win32 MessageBox.
Komponenta prostředí Windows Runtime (C++/WinRT)
Šablona projektu pro komponentu; obvykle pro spotřebu z univerzální platformy Windows (UPW).
Tato šablona ukazuje sadu nástrojů midl.exe>cppwinrt.exe, kde se z IDL vygenerují metadata prostředí Windows Runtime (.winmd) a pak se z metadat prostředí Windows Runtime vygenerují zástupné procedury implementace a hlaviček.
V souboru IDL definujte třídy modulu runtime ve vaší komponentě, jejich výchozí rozhraní a jakékoli další rozhraní, která implementují. Vytvořte projekt jednou, aby se vygenerovaly module.g.cpp, module.h.cpp, šablony implementace v Generated Filesa definice zástupných typů v Generated Files\sources. Pak použijte definice typu zástupných procedur pro referenci k implementaci tříd modulu runtime ve vaší komponentě. Vizte Dělení tříd za běhu do souborů MIDL (.idl).
Sbalte sestavený binární soubor komponenty prostředí Windows Runtime a jeho .winmd s aplikací pro UWP, která je využívá.
Starší verze rozšíření VSIX
Doporučujeme nainstalovat (nebo aktualizovat na) nejnovější verzi rozšíření VSIX. Je nakonfigurovaná tak, aby se ve výchozím nastavení aktualizovala. Pokud to uděláte a máte projekty vytvořené s verzí rozšíření VSIX starší než 1.0.190128.4, obsahuje tato část důležité informace o upgradu těchto projektů tak, aby fungovaly s novou verzí. Pokud se neaktualizujete, informace najdete v této části.
Pokud jde o podporované verze sady Windows SDK a Visual Studio a konfiguraci sady Visual Studio, platí informace v podpoře sady Visual Studio pro C++/WinRT, XAML, rozšíření VSIX a část balíčku NuGet uvedené výše pro starší verze rozšíření VSIX. Níže uvedené informace popisují důležité rozdíly týkající se chování a konfigurace projektů vytvořených s dřívějšími verzemi (nebo upgradovanými na práci s nimi).
Vytvořeno dříve než 1.0.181002.2
Pokud byl projekt vytvořen s verzí rozšíření VSIX starší než 1.0.181002.2, byla podpora sestavení C++/WinRT integrovaná do této verze rozšíření VSIX. Váš projekt má vlastnost <CppWinRTEnabled>true</CppWinRTEnabled> nastavenu v souboru .vcxproj.
<Project ...>
<PropertyGroup Label="Globals">
<CppWinRTEnabled>true</CppWinRTEnabled>
...
Projekt můžete upgradovat ruční instalací balíčku NuGet Microsoft.Windows.CppWinRT. Po instalaci (nebo upgradu na) nejnovější verzi rozšíření VSIX otevřete projekt v sadě Visual Studio, klikněte na projekt>Spravovat balíčky NuGet>Vyhledejte, zadejte nebo vložte Microsoft.Windows.CppWinRT do vyhledávacího pole, vyberte položku ve výsledcích hledání, a pak klikněte na nainstalovat pro instalaci balíčku pro váš projekt.
Vytvořeno nebo upgradováno na verzi mezi 1.0.181002.2 a 1.0.190128.3
Pokud byl projekt vytvořen s verzí rozšíření VSIX mezi 1.0.181002.2 a 1.0.190128.3 včetně, pak balíček NuGet Microsoft.Windows.CppWinRT byl v projektu automaticky nainstalován šablonou projektu. Možná jste upgradovali starší projekt tak, aby používal verzi rozšíření VSIX v tomto rozsahu. Pokud jste to udělali, pak – jelikož podpora sestavení byla stále k dispozici i ve verzích rozšíření VSIX v tomto rozsahu – váš upgradovaný projekt může, ale nemusí mít nainstalovaný balíček NuGet Microsoft.Windows.CppWinRT.
Pokud chcete upgradovat projekt, postupujte podle pokynů v předchozí části a ujistěte se, že má váš projekt nainstalovaný balíček NuGet Microsoft.Windows.CppWinRT .
Neplatné konfigurace aktualizace
S nejnovější verzí rozšíření VSIX není platné, aby měl projekt vlastnost <CppWinRTEnabled>true</CppWinRTEnabled>, pokud také nemá nainstalovaný balíček NuGet Microsoft.Windows.CppWinRT. Projekt s touto konfigurací vytvoří chybovou zprávu o sestavení s hlášením: "C++/WinRT VSIX již neposkytuje podporu pro sestavování projektu." Přidejte odkaz na projekt do balíčku NuGet Microsoft.Windows.CppWinRT."
Jak už bylo zmíněno výše, projekt C++/WinRT teď musí mít v něm nainstalovaný balíček NuGet.
Vzhledem k tomu, že prvek <CppWinRTEnabled> je nyní považován za zastaralý, můžete také upravit .vcxproja odstranit prvek. Není to nezbytně nutné, ale je to možnost.
Pokud .vcxproj obsahuje <RequiredBundles>$(RequiredBundles);Microsoft.Windows.CppWinRT</RequiredBundles>, můžete ho také odebrat, abyste ho mohli sestavit bez nutnosti instalace rozšíření C++/WinRT VSIX.
Podpora sady SDK pro C++/WinRT
I když je nyní k dispozici pouze z důvodů kompatibility, od verze 10.0.17134.0 (Windows 10 verze 1803), sada Windows SDK obsahuje standardní knihovnu C++ založenou na souborech hlaviček pro využití nativních rozhraní Windows API (rozhraní Windows Runtime API v oborech názvů Windows). Tato záhlaví jsou uvnitř složky %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt. Od sady Windows SDK verze 10.0.17763.0 (Windows 10 verze 1809) se tyto hlavičky vygenerují za vás ve složce $(GeneratedFilesDir) vašeho projektu.
Kvůli kompatibilitě se také dodává sada Windows SDK s nástrojem cppwinrt.exe . Doporučujeme ale místo toho nainstalovat a používat nejnovější verzi cppwinrt.exe, která je součástí balíčku NuGet Microsoft.Windows.CppWinRT . Tento balíček a cppwinrt.exe, jsou popsány v částech výše.
Vlastní typy v projekci C++/WinRT
V programování C++/WinRT můžete použít standardní jazykové funkce C ++ a datové typy Standard C++ a C++/WinRT, včetně některých datových typů standardní knihovny C++. V projekci se ale také seznámíte s některými vlastními datovými typy a můžete je použít. Například použijeme winrt::hstring v příkladu kódu pro rychlý start v části Začínáme s C++/WinRT.
winrt::com_array je jiný typ, který pravděpodobně použijete v určitém okamžiku. Ale méně pravděpodobné je, že budete přímo používat typ, jako je winrt::array_view. Nebo se můžete rozhodnout, že ho nebudete používat, takže nebudete mít žádný kód, který by se měl změnit, pokud a když se v standardní knihovně C++ zobrazí ekvivalentní typ.
Výstraha
Existují také typy, které můžete zjistit, pokud pečlivě prozkoumáte hlavičky oboru názvů C++/WinRT Windows. Příkladem je winrt::param::hstring, ale existují i příklady kolekcí. Existují výhradně pro optimalizaci vazby vstupních parametrů a poskytují významné vylepšení výkonu, díky čemuž většina vzorů volání "prostě funguje" pro příslušné standardní typy a kontejnery v jazyce C++. Tyto typy se používají pouze tehdy, když projekce přinášejí největší hodnotu. Jsou vysoce specializované a nejsou určené pro obecné použití; nenechte se zlákat k jejich používání sami. Ani byste neměli používat nic z winrt::impl oboru názvů, protože se jedná o typy implementace, a proto se můžou změnit. Měli byste dál používat standardní typy nebo typy z oboru názvů winrt.
Viz také Předávání parametrů do rozhraní ABI.
Důležitá rozhraní API
- winrt::hstring – struktura
- jmenný prostor winrt