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í 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. S C++/WinRT můžete vytvářet a využívat prostředí Windows Runtime rozhraní API 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).
Tip
Kdy zvolit C++/WinRT: Jazyk C++/WinRT použijte, když potřebujete vytvářet Windows aplikace v jazyce C++ – například když omezení výkonu nevyžadují uvolňování paměti, při spolupráci s existujícími knihovnami C++ nebo při vytváření prostředí Windows Runtime komponent. Pokud váš projekt tyto požadavky nemá, zvažte C# s WinUI 3 pro rychlejší vývoj a integrovanou bezpečnost paměti.
C++/WinRT je společností Microsoft doporučovanou náhradou za jazykovou projekci C++/CX a za knihovnu šablon C++ pro prostředí Windows Runtime (WRL). Úplný seznam témat o C++/WinRT obsahuje informace o vzájemné spolupráci a přenosech z C++/CX a WRL.
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 podporu pro C++/WinRT, XAML, rozšíření VSIX a balíček NuGet.
Podívejte se také , kde najdu ukázkové aplikace C++/WinRT?.
Jazykové projekce
prostředí Windows Runtime je založená na rozhraních API modelu COM (Component Object Model) a je navržená tak, aby byla 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í API pro prostředí Windows Runtime klikněte na rozevírací seznam Jazyk v pravém horním rohu a vyberte C++/WinRT, aby se bloky syntaxe rozhraní API zobrazily v podobě, v jaké se používají v jazykové projekci C++/WinRT.
Visual Studio podpora C++/WinRT, XAML, rozšíření VSIX a balíčku NuGet
Pro podporu Visual Studio budete potřebovat Visual Studio 2022 nebo novější. V instalačním programu Visual Studio nainstalujte úlohu Vývoj pro Univerzální platformu Windows. V Podrobnosti instalace>Vývoj pro Univerzální platforma Windows zaškrtněte možnost či možnosti nástroje C++ (v14x) pro Univerzální platforma Windows, pokud jste tak ještě neučinili. A v části Windows Nastavení>ochrany osobních údajů a zabezpečení>Pro vývojáře povolte možnost Vývojářský režim.
Note
Visual Studio 2022 a novější verze obsahují integrované šablony projektů a položek pro C++/WinRT spolu s nativní vizualizací ladění (natvis) promítnutých typů C++/WinRT. Pokud používáte starší verzi Visual Studio, nainstalujte rozšíření C++/WinRT VSIX z webu Visual Studio Marketplace.
Šablony projektu 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 Microsoft.Windows. Balíček NuGet CppWinRT Microsoft.Windows. Balíček NuGet 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ší verze rozšíření VSIX otevřete existující projekt v aplikaci Visual Studio, klikněte na Project>Spravovat balíčky NuGet...>Procházet, do vyhledávacího pole zadejte nebo vložte Microsoft.Windows.CppWinRT, ve výsledcích hledání vyberte položku a potom kliknutím na Instalovat nainstalujte balíček pro tento projekt. 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é pro práci) verze rozšíření VSIX starší než 1.0.190128.4, přečtěte si předchozí 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++>Language>C++ Language Standard>ISO C++17 Standard (/std:c++17) v 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, kterou byste měli znát, je C/C++>Obecné>Považovat upozornění za chyby. Nastavte hodnotu Ano(/WX) nebo Ne (/WX-) na chuť. Někdy zdrojové soubory vygenerované
cppwinrt.exenástrojem generují upozornění, dokud do nich nepřidáte implementaci.
S nastavením systému, jak je popsáno výše, budete moct vytvořit a sestavit nebo otevřít projekt C++/WinRT v Visual Studio a nasadit ho.
Od verze 2.0 obsahuje balíček NuGet Microsoft.Windows.CppWinRT nástroj cppwinrt.exe. Nástroj cppwinrt.exe můžete nasměrovat na soubor metadat prostředí prostředí Windows Runtime (.winmd) a vygenerovat standardní knihovnu C++ založenou na souborech záhlaví, která zpřístupňuje rozhraní API popsaná v metadatech pro použití z kódu C++/WinRT. prostředí Windows Runtime metadata (.winmd) soubory poskytují kanonický způsob popisu povrchu prostředí Windows Runtime rozhraní API. Když nasměrujete cppwinrt.exe na metadata, můžete vygenerovat knihovnu pro použití s libovolnou třídou modulu runtime implementovanou v prostředí Windows Runtime komponentě druhé nebo třetí strany nebo implementovat ve vlastní aplikaci. Další informace najdete v tématu Využití rozhraní API s 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 třídu runtime stačí jen popsat typy v souboru IDL a midl.exe a cppwinrt.exe za vás vygenerují šablonové soubory zdrojového kódu implementace. Alternativně můžete implementovat rozhraní odvozením ze základní třídy C++/WinRT. Další informace najdete v tématu Vytváření rozhraní API pomocí C++/WinRT.
Seznam možností přizpůsobení pro nástroj cppwinrt.exe, nastavených prostřednictvím vlastností projektu, naleznete v souboru readme balíčku NuGet Microsoft.Windows.CppWinRT.
Projekt, který používá podporu MSBuild pro C++/WinRT, můžete rozpoznat podle přítomnosti balíčku NuGet Microsoft.Windows.CppWinRT nainstalovaného v projektu.
Tady jsou šablony projektu Visual Studio poskytované rozšířením VSIX.
Prázdná aplikace (C++/WinRT)
Šablona projektu pro Univerzální platforma Windows (UPW) aplikaci, která má uživatelské rozhraní XAML. Pro desktopové aplikace WinUI 3 použijte místo toho šablonu Prázdná aplikace, zabalená (WinUI 3 v desktopové verzi).
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 značek XAML. V souboru IDL definujte všechny lokální runtime třídy, na které chcete odkazovat na stránkách XAML vaší aplikace, a pak projekt jednou sestavte, aby se vygenerovaly šablony implementace v Generated Files a zástupné definice typů v Generated Files\sources. Potom tyto zástupné definice typů použijte jako předlohu k implementaci svých lokálních běhových tříd. Viz Přesunutí tříd modulu runtime do souborů Midl (.idl).
Podpora návrhové plochy XAML v Visual Studio pro C++/WinRT se blíží paritě s jazykem C#. V Visual Studio můžete pomocí karty Události v okně 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 Univerzální platforma Windows (UPW) aplikaci, která nepoužívá XAML. Neexistuje žádný ekvivalent WinUI 3 této šablony.
Místo toho používá hlavičkový soubor oboru názvů Windows z knihovny 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 Windows Desktop s uživatelským rozhraním konzoly.
Desktopová aplikace windows (C++/WinRT)
Šablona projektu pro klientskou aplikaci C++/WinRT pro Windows Desktop, která zobrazuje prostředí Windows Runtime Windows. Foundation.Uri uvnitř win32 MessageBox.
Komponenta prostředí prostředí Windows Runtime (C++/WinRT)
Šablona projektu pro komponentu; obvykle pro spotřebu z Univerzální platforma Windows (UPW).
Tato šablona demonstruje řetězec nástrojů midl.exe>cppwinrt.exe, ve kterém se z IDL generují metadata prostředí Windows Runtime (.winmd) a z těchto metadat prostředí Windows Runtime se následně generují kostry implementace a hlavičkové soubory.
V souboru IDL definujte třídy modulu runtime ve vaší komponentě, jejich výchozí rozhraní a jakékoli další rozhraní, která implementují. Jednou sestavte projekt, abyste vygenerovali module.g.cpp, module.h.cpp, šablony implementace v Generated Files a zástupné definice typů v Generated Files\sources. Pak tyto stub definice typů použijte jako referenci při implementaci běhových tříd ve své komponentě. Viz Přesunutí tříd modulu runtime do souborů Midl (.idl).
Sbalte sestavený binární soubor komponenty prostředí Windows Runtime a jeho .winmd komponentu s aplikací pro UPW, 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 Visual Studio, platí informace v Visual Studio podpoře C++/WinRT, XAML, rozšíření VSIX a výše uvedené části balíčku NuGet 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> nastavenou 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 aktualizaci na) nejnovější verzi rozšíření VSIX otevřete svůj projekt v aplikaci Visual Studio, klikněte na Project>Spravovat balíčky NuGet...>Procházet, do vyhledávacího pole zadejte nebo vložte Microsoft.Windows.CppWinRT, ve výsledcích vyhledávání vyberte položku a potom klikněte na Install, aby se balíček nainstaloval pro váš projekt.
Vytvořeno pomocí verze (nebo upgradováno na verzi) mezi 1.0.181002.2 a 1.0.190128.3
Pokud byl váš projekt vytvořen pomocí verze rozšíření VSIX mezi 1.0.181002.2 a 1.0.190128.3 včetně, balíček NuGet Microsoft.Windows.CppWinRT se do projektu automaticky nainstaloval pomocí šablony projektu. Možná jste upgradovali starší projekt tak, aby používal verzi rozšíření VSIX v tomto rozsahu. Pokud ano, pak—jelikož podpora sestavení byla stále přítomna i ve verzích rozšíření VSIX v tomto rozmezí—váš upgradovaný projekt může, ale nemusí mít nainstalovaný balíček NuGet Microsoft.Windows.CppWinRT.
Pokud chcete svůj projekt upgradovat, 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
V nejnovější verzi rozšíření VSIX není přípustné, aby projekt obsahoval vlastnost <CppWinRTEnabled>true</CppWinRTEnabled>, pokud zároveň nemá nainstalovaný balíček NuGet Microsoft.Windows.CppWinRT. Projekt s touto konfigurací vypíše při sestavení chybovou zprávu: „C++/WinRT VSIX již neposkytuje podporu sestavení projektu.“ Přidejte do projektu odkaz na balíček 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í zastaralý, můžete volitelně upravit svůj .vcxproj a tento prvek odstranit. 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
Přestože je nyní přítomna pouze z důvodů kompatibility, od verze 10.0.17134.0 (Windows 10, verze 1803) obsahuje sada Windows SDK standardní knihovnu C++ založenou na hlavičkových souborech pro využívání vlastních rozhraní API systému Windows (rozhraní API prostředí Windows Runtime 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) projektu.
Kvůli kompatibilitě sada Windows SDK obsahuje také nástroj cppwinrt.exe. Doporučujeme však 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.
Warning
Existují také typy, které můžete zjistit, pokud pečlivě prozkoumáte hlavičky oboru názvů C++/WinRT Windows. Příkladem je winrt::p aram::hstring, ale existují i příklady kolekcí. Tyto prvky existují výhradně kvůli optimalizaci předávání vstupních parametrů, výrazně zvyšují výkon a zajišťují, že většina způsobů volání pro související standardní typy a kontejnery jazyka C++ „prostě funguje“. Tyto typy se projekcí používají pouze v případech, kdy mají největší přínos. Jsou vysoce optimalizované a nejsou určené pro běžné použití; nenechte se zlákat k tomu, abyste je sami používali. Ani byste neměli používat nic z oboru názvů winrt::impl, protože se jedná o implementační typy, a mohou se tedy 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ů přes rozhraní ABI.
Důležitá rozhraní API
Příbuzná témata
Windows developer