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.
Pomocí architektury prostředí Windows Runtime můžete k psaní aplikací a komponent použít C++/WinRT, C++/CX, Visual Basic, Visual C# a JavaScript. Můžou přímo přistupovat k rozhraní API pro Windows a spolupracovat s dalšími aplikacemi a komponentami prostředí Windows Runtime. Univerzální platforma Windows aplikace (UPW), které jsou napsané v kompilaci jazyka C++ do nativního kódu, který se spouští přímo v procesoru. Aplikace pro UPW napsané v jazyce C# nebo Visual Basic se kompilují do jazyka MSIL (Microsoft Intermediate Language) a spouštějí se v modulu CLR (Common Language Runtime). Aplikace pro UPW napsané v JavaScriptu se spouštějí v prostředí runtime JavaScriptu. Samotné součásti operačního systému prostředí Windows Runtime jsou napsané v jazyce C++ a běží jako nativní kód. Všechny tyto komponenty a aplikace pro UPW komunikují přímo prostřednictvím binárního rozhraní aplikace prostředí Windows Runtime (ABI).
Pokud chcete povolit podporu prostředí Windows Runtime v moderním idiomu C++, společnost Microsoft vytvořila rozšíření jazyka C++/CX. C++/CX poskytuje integrované základní typy a implementace základních typů prostředí Windows Runtime. Tyto typy umožňují aplikacím a komponentám C++ komunikovat přes ABI s aplikacemi napsanými v jiných jazycích. Aplikace C++/CX můžou využívat libovolný typ prostředí Windows Runtime. Mohou také vytvářet třídy, struktury, rozhraní a další uživatelem definované typy, které mohou využívat jiné aplikace a komponenty UPW. Aplikace pro UPW napsaná v C++/CX může také používat běžné třídy a struktury jazyka C++, pokud nemají veřejnou přístupnost.
Podrobnou diskuzi o projekci jazyka C++/CX a o tom, jak funguje v rámci krytů, najdete v těchto blogových příspěvcích:
Poznámka:
I když se jazyk C++/CX stále podporuje, doporučujeme místo toho používat C++/WinRT pro nové aplikace a součásti prostředí Windows Runtime. Je navržená tak, aby vám poskytovala prvotřídní přístup k modernímu rozhraní WINDOWS API. Bez ohledu na název používá C++/WinRT pouze standardní C++17 bez rozšíření. K implementaci projekce jazyka C++ pro prostředí Windows Runtime rozhraní API používá knihovnu jen pro hlavičku. C++/WinRT je k dispozici v sadě Windows SDK verze 1803 (10.0.17134.0) dále.
Soubory metadat Windows (.winmd)
Když zkompilujete aplikaci pro UPW napsanou v jazyce C++, kompilátor vygeneruje spustitelný soubor v nativním strojovém kódu a také vygeneruje samostatný soubor metadat Systému Windows,.winmd který obsahuje popisy veřejných typů prostředí Windows Runtime, které zahrnují třídy, struktury, výčty, rozhraní, parametrizované rozhraní a delegáty. Formát metadat se podobá formátu, který se používá v sestaveních rozhraní .NET Framework. V komponentě .winmd C++ soubor obsahuje pouze metadata. Spustitelný kód je v samostatném souboru. Toto uspořádání používají komponenty prostředí Windows Runtime, které jsou součástí systému Windows.
.winmd Název souboru se musí shodovat nebo musí být předponou kořenového oboru názvů ve zdrojovém kódu. (Pro jazyky .winmd rozhraní .NET Framework soubor obsahuje kód i metadata, stejně jako sestavení rozhraní .NET Framework.)
Metadata v .winmd souboru představují publikovanou plochu vašeho kódu. Publikované typy jsou viditelné pro jiné aplikace pro UPW bez ohledu na to, v jakém jazyce jsou tyto ostatní aplikace napsané. Metadata nebo publikovaný kód můžou obsahovat pouze typy určené systémem typů prostředí Windows Runtime. Konstrukty jazyka specifické pro jazyk C++, jako jsou běžné třídy, pole, šablony nebo kontejnery STL (Standard Library) jazyka C++, nemůžete publikovat. Klientská aplikace v JavaScriptu nebo C# by nevěděla, co s nimi dělat.
To, jestli je typ nebo metoda viditelná v metadatech, závisí na tom, jaké modifikátory přístupnosti se na něj použijí. Aby byl typ viditelný, musí být deklarován v oboru názvů a musí být deklarován jako public. Vpublicref class kódu je povolený jiný než interní pomocný typ. V metadatech se prostě nezobrazuje. Dokonce i v public ref class, ne všichni členové jsou nutně viditelné. Následující tabulka uvádí vztah mezi specifikátory přístupu jazyka C++ a public ref classprostředí Windows Runtime viditelnosti metadat:
| Publikováno v metadatech | Nepublikuje se v metadatech |
|---|---|
public |
private |
protected |
internal |
public protected |
private protected |
Obsah souborů můžete zobrazit pomocí .winmd objektů. V souboru najdete Windows.winmd prostředí Windows Runtime součástí systému Windows. Soubor default.winmd obsahuje základní typy, které se používají v jazyce C++/CX, a platform.winmd obsahuje typy z Platform oboru názvů. Ve výchozím nastavení jsou tyto tři .winmd soubory zahrnuty do každého projektu C++ pro aplikace pro UPW.
Tip
Typy v Platform::Collections oboru názvů se v .winmd souboru nezobrazují, protože nejsou veřejné. Jedná se o privátní implementace rozhraní specifických pro jazyk C++, která jsou definována v Windows::Foundation::Collections. Aplikace prostředí Windows Runtime napsaná v JavaScriptu nebo C# neví, co Platform::Collections::Vector je třída, ale může využívat Windows::Foundation::Collections::IVector. Typy Platform::Collections jsou definovány v collection.h.
prostředí Windows Runtime systému typů v C++/CX
Následující části popisují hlavní funkce systému typů prostředí Windows Runtime a jejich podporu v jazyce C++/CX.
Obory názvů
Všechny typy prostředí Windows Runtime musí být deklarovány v rámci oboru názvů. Samotné rozhraní API systému Windows je uspořádané podle oboru názvů. Soubor .winmd musí mít stejný název jako kořenový obor názvů. Například pojmenovanou třídu A.B.C.MyClass lze vytvořit instanci pouze v případě, že je definovaná v souboru metadat s názvem A.winmd, A.B.winmdnebo A.B.C.winmd. Název knihovny DLL se nevyžaduje, aby odpovídal .winmd názvu souboru.
Samotné rozhraní API systému Windows se znovu vytvořilo jako dobře faktorovaná knihovna tříd, která je uspořádaná podle oborů názvů. Všechny komponenty prostředí Windows Runtime jsou deklarovány v Windows.* oborech názvů.
Další informace naleznete v tématu Obory názvů a viditelnost typů.
Základní typy
Prostředí Windows Runtime definuje následující základní typy: , , , , , UInt8, Int16, UInt16, Int32, UInt32Int64UInt64, a .SingleDoubleChar16BooleanString C++/CX podporuje základní číselné typy ve výchozím oboru názvů jako uint16, uint32, , uint64, int16, int32, int64, float32, , a .float64char16
Boolean a String jsou také definovány Platform v oboru názvů.
C++/CX také definuje uint8, což unsigned charnení podporováno v prostředí Windows Runtime a nelze ho použít ve veřejných rozhraních API.
Základní typ může být nullable tak, že ho zabalíte Platform::IBox do rozhraní. Další informace naleznete v tématu Třídy hodnot a struktury.
Další informace o základních typech naleznete v tématu Základní typy
Řetězce
Řetězec prostředí Windows Runtime je neměnná posloupnost 16bitových znaků UNICODE. Řetězec prostředí Windows Runtime se promítá jako Platform::String^. Tato třída poskytuje metody pro výstavbu řetězců, manipulaci a převod na a z wchar_t.
Další informace naleznete v tématu Řetězce.
Pole
Prostředí Windows Runtime podporuje jednorozměrná pole libovolného typu. Pole polí nejsou podporována. V jazyce C++/CX jsou pole prostředí Windows Runtime projektována jako Platform::Array třída.
Další informace najdete v tématech Array a WriteOnlyArray.
ref class a ref struct typy
Třída prostředí Windows Runtime se projektuje v jazyce C++/CX jako ref class typ, ref struct protože je zkopírovaná odkazem. Správa paměti pro ref class objekty a ref struct objekty se zpracovává transparentně prostřednictvím počítání odkazů. Když poslední odkaz na objekt zmizí z rozsahu, objekt se zničí. Typ ref class může ref struct :
Obsahují jako konstruktory, metody, vlastnosti a události členů. Tito členové mohou mít
public,private,protectednebointernalpřístupnost.Může obsahovat privátní vnořené
enum,structneboclassdefinice.Může přímo dědit z jedné základní třídy a může implementovat libovolný počet rozhraní. Všechny
ref classobjekty jsou implicitně konvertibilní doPlatform::Objecttřídy a mohou přepsat své virtuální metody ,Object::ToStringnapříklad .
Aby ref class se zabránilo dalšímu odvození, musí být deklarován jako sealedveřejný konstruktor.
Další informace naleznete v tématu Referenční třídy a struktury
value class a value struct typy
A value class nebo value struct představuje základní datovou strukturu a obsahuje pouze pole, která mohou být value class typy, value struct typy nebo typ Platform::String^.
value struct a value class objekty se kopírují podle hodnoty.
Hodnotu Null value struct lze vytvořit tak, že ji zabalíte IBox do rozhraní.
Další informace naleznete v tématu Třídy hodnot a struktury.
Dílčí třídy
Funkce částečné třídy umožňuje definovat jednu třídu přes více souborů. Umožňuje nástroje pro generování kódu, jako je editor XAML, upravovat jeden soubor, aniž byste se museli dotýkat jiného souboru, který upravujete.
Další informace naleznete v tématu Částečné třídy
Vlastnosti
Vlastnost je veřejný datový člen libovolného typu prostředí Windows Runtime. Deklaruje se a definuje pomocí klíčového property slova. Vlastnost se implementuje jako get/set dvojice metod. Klientský kód přistupuje k vlastnosti, jako by šlo o veřejné pole. Vlastnost, která nevyžaduje žádný vlastní get kód, set se označuje jako triviální vlastnost a lze ji deklarovat bez explicitních get nebo set metod.
Další informace naleznete v tématu Vlastnosti.
prostředí Windows Runtime kolekce v C++/CX
Prostředí Windows Runtime definuje sadu rozhraní pro typy kolekcí, které každý jazyk implementuje vlastním způsobem. C++/CX poskytuje implementace ve Platform::Collections::Vector třídě, Platform::Collections::Map třídě a dalších souvisejících typech kolekcí, které jsou kompatibilní s jejich protějšky standardní knihovny jazyka C++.
Další informace naleznete v tématu Kolekce.
Typy šablon ref class
private a internal typy přístupu ref class mohou být šablonovány a specializované.
Další informace naleznete v tématu Šablony ref třídy.
Rozhraní
Rozhraní prostředí Windows Runtime definuje sadu veřejných vlastností, metod a událostí, které ref class musí určitý typ ref struct implementovat, pokud dědí z rozhraní.
Další informace naleznete v tématu Rozhraní.
Výčty
Typ enum class v prostředí Windows Runtime se podobá oboru v enum jazyce C++. Základní typ je int32, pokud není použit atribut [Flags] – v takovém případě je uint32podkladový typ .
Další informace naleznete v tématu Výčty.
Delegáti
Delegát v prostředí Windows Runtime je podobný objektu std::function v jazyce C++. Jedná se o speciální ref class typ, který se používá k vyvolání funkcí poskytovaných klientem, které mají kompatibilní podpisy. Delegáti se nejčastěji používají v prostředí Windows Runtime jako typ události.
Další informace naleznete v tématu Delegáti.
Výjimky
V C++/CX můžete zachytit vlastní typy výjimek, std::exception typy a Platform::Exception typy.
Další informace naleznete v tématu Výjimky.
Události
Událost je veřejný člen v typu ref class delegáta nebo ref struct jeho typ. Událost může být vyvolána pouze vlastní třídou, tj. aktivována. Kód klienta však může poskytovat vlastní funkce obslužné rutiny událostí, které jsou vyvolány při spuštění vlastní třídy událostí.
Další informace naleznete v tématu Události.
Přetypování
C++/CX podporuje standardní operátory static_castpřetypování C++ , dynamic_casta reinterpret_casta také safe_cast operátor specifický pro C++/CX.
Další informace naleznete v tématu Casting.
Zabalení
Boxed variable is a value type that's wrappe in a reference type. V situacích, kdy je vyžadována referenční sémantika, použijte krabicové proměnné.
Další informace najdete v tématu Boxing.
Atributy
Atribut je hodnota metadat, kterou lze použít u libovolného typu prostředí Windows Runtime typu nebo člena typu. Atributy je možné zkontrolovat za běhu. Prostředí Windows Runtime definuje sadu běžných atributů v Windows::Foundation::Metadata oboru názvů. Uživatelem definované atributy ve veřejných rozhraních prostředí Windows Runtime v této verzi nepodporují.
Vyřazení rozhraní API
Veřejná rozhraní API můžete označit jako zastaralá pomocí stejného atributu, který používají typy systému prostředí Windows Runtime.
Další informace najdete v tématu Vyřazení typů a členů.