Typsystem (C++/CX)

Mithilfe der Windows-Runtime-Architektur können Sie C++/CX, Visual Basic, Visual C# und JavaScript verwenden, um Apps und Komponenten zu erstellen, die direkt auf die Windows-API zugreifen und mit anderen Windows-Runtime-Apps und -Komponenten zusammenarbeiten. In C++ geschriebene Windows Store-Apps werden in systemeigenen Code kompiliert, der direkt in der CPU ausgeführt wird. In C# oder Visual Basic geschriebene Windows Store-Apps werden in MSIL (Microsoft Intermediate Language) kompiliert und in Common Language Runtime ausgeführt (CLR). In JavaScript geschriebene Windows Store-Apps werden in einer Laufzeitumgebung ausgeführt. Die Windows-Runtime-Betriebssystemkomponenten selbst sind in C++ geschrieben und werden als systemeigener Code ausgeführt. Alle diese Komponenten und Windows Store-Apps kommunizieren direkt über die Windows-Runtime-ABI (Application Binary Interface = Binärschnittstelle).

Damit Windows-Runtime in einer modernen C++-Sprache unterstützt werden kann, wurden von Microsoft Komponentenerweiterungen für Visual C++ (C++/CX) entwickelt. C++/CX stellt integrierte Basistypen und Implementierungen von grundlegenden Windows-Runtime-Typen zur Verfügung, mit denen C++-Apps und -Komponenten über die ABI mit den in anderen Sprachen geschriebenen Apps kommunizieren können. Sie können jeden Windows-Runtime-Typ nutzen oder Klassen, Strukturen, Schnittstellen und andere benutzerdefinierte Typen erstellen, die von anderen Windows Store-Apps und -Komponenten verwertet werden können. Eine in C++/CX geschriebene Windows Store-App kann auch reguläre C++-Klassen und Strukturen verwenden, solange diese ohne öffentlichen Zugriff sind.

Wenn Sie eine Windows Store-App kompilieren, die in C++ geschrieben ist, wird vom Compiler die ausführbare Datei im systemeigenen Computercode generiert. Ferner wird eine separate Windows-Metadatendatei (.winmd) generiert, die die Beschreibungen der öffentlichen Windows-Runtime-Typen enthält, zu denen Klassen, Strukturen, Enumerationen, Schnittstellen, parametrisierte Schnittstellen und Delegaten gehören. Das Format der Metadaten ähnelt dem Format, das in den .NET Framework-Assemblys verwendet wird. In einer C++-Komponente enthält die WinMD-Datei nur Metadaten. Der ausführbare Code befindet sich in einer separaten Datei. Dies ist bei den Windows-Runtime-Komponenten der Fall, die in Windows enthalten sind. Der WinMD-Dateiname muss übereinstimmen oder ein Präfix des Stammnamenspace im Quellcode sein. (Für die .NET Framework-Sprachen sind in einer WinMD-Datei wie in einer .NET Framework-Assembly sowohl Code als auch Metadaten enthalten.)

Die Metadaten in der WinMD-Datei stellen die veröffentlichte Oberfläche des Codes dar. Veröffentlichte Typen werden von anderen Apps mit Windows Store erkannt, unabhängig davon, in welcher Sprache diese anderen Apps geschrieben sind. Daher können die Metadaten oder der veröffentlichte Code nur Typen enthalten, die vom Windows-Runtime-Typsystem definiert sind. C++-spezifische Sprachkonstrukte wie reguläre Klassen, Arrays, Vorlagen oder STL-Container können nicht in Metadaten veröffentlicht werden, da eine JavaScript- oder C#-Clientapp sie nicht verwenden kann.

Ob ein Typ oder eine Methode in den Metadaten sichtbar ist, hängt davon ab, welche Zugriffsmodifizierer auf diesen Typ oder diese Methode angewendet werden. Um sichtbar zu sein, muss ein Typ sowohl in einem Namespace als auch als öffentlich deklariert werden. Eine nicht öffentliche Verweisklasse ist als interner Hilfsprogrammtyp im Code zugelassen, wird jedoch nicht in den Metadaten angezeigt. Es sind jedoch auch in einer öffentlichen Verweisklasse nicht unbedingt alle Member sichtbar. In der folgenden Tabelle wird die Beziehung zwischen C++-Zugriffsspezifizierern in einer öffentlichen Verweisklasse und der Metadatensichtbarkeit von Windows-Runtime aufgeführt:

In Metadaten veröffentlicht

Nicht in Metadaten veröffentlicht

public

private

protected

internal

public protected

private protected

Mit dem Objektkatalog können Sie den Inhalt von WinMD-Dateien anzeigen. Die in Windows enthaltenen Windows-Runtime-Komponenten befinden sich in der Datei Windows.winmd. Die Datei default.winmd enthält die grundlegenden Typen, die in C++/CX verwendet werden. Die Datei platform.winmd enthält zusätzliche Typen von dem Plattform-Namespace. Diese drei WinMD-Dateien sind standardmäßig in jedem für Windows Store-Apps zur Verfügung stehenden C++-Projekt enthalten.

Tipp Tipp

Die im Platform::Collections-Namespace vorhandenen Typen sind in der WinMD-Datei nicht sichtbar, da sie nicht öffentlich sind. Es sind private C++-spezifische Implementierungen der Schnittstellen, die in Windows::Foundation::Collections definiert sind. Eine in JavaScript oder C# geschriebene Windows-Runtime-App kann Platform::Collections::Vector-Klasse nicht interpretieren, aber sie kann Windows::Foundation::Collections::IVector nutzen. Die Platform::Collections-Typen werden in der Datei collection.h definiert.

In den folgenden Abschnitten werden die Hauptfunktionen des Windows-Runtime-Typsystems beschrieben. Es wird auch erläutert, wie diese Funktionen in C++/CX unterstützt werden.

Hh755822.collapse_all(de-de,VS.120).gifNamespaces

Alle Windows-Runtime-Typen müssen innerhalb eines Namespace deklariert werden. Die Windows-API selbst ist nach Namespaces organisiert. Eine WinMD-Datei muss denselben Namen wie der Stammnamespace haben. Zum Beispiel kann eine Klasse namens A.B.C.MyClass nur instanziiert werden, wenn sie in einer Metadatendatei definiert ist, die A.winmd oder A.B.winmd oder A.B.C.winmd heißt. Der Name der DLL muss nicht mit dem Namen der WINMD-Datei übereinstimmen.

Die Windows-API selbst wurde überarbeitet und präsentiert sich nun als gut gestaltete Klassenbibliothek, die nach Namespaces organisiert ist. Alle Windows-Runtime-Komponenten werden in den Namespaces Windows.* deklariert.

Weitere Informationen finden Sie unter Namespaces und Typsichtbarkeit (C++/CX).

Hh755822.collapse_all(de-de,VS.120).gifGrundlegende Typen

Windows-Runtime definiert die folgenden grundlegenden Typen: UInt8, Int16, UInt16, Int32, UInt32, Int64, Uint64, Single, Double, Char16, Boolean und String. C++/CX unterstützt die grundlegenden numerischen Typen im Standardnamespace als uint16, uint32, uint64, int16, int32, int64, float32, float64 und char16. Boolean und String werden auch im Plattformnamespace definiert.

C++/CX definiert auch uint8, der dem Typ unsigned char entspricht, welcher nicht in Windows-Runtime unterstützt wird und in öffentlichen APIs nicht verwendet werden kann.

Ein elementarer Typ kann auf NULL festlegbar gemacht werden, indem er in einerPlatform::IBox Interface-Schnittstelle umgebrochen wird. Weitere Informationen finden Sie unter Wertklassen und Strukturen (C++/CX).

Weitere Informationen über grundlegende Typen finden Sie unter Grundlegende Typen (C++/CX).

Hh755822.collapse_all(de-de,VS.120).gifZeichenfolgen

Eine Windows-Runtime-Zeichenfolge ist eine unveränderliche Sequenz von 16-Bit-UNICODE-Zeichen. Eine Windows-Runtime-Zeichenfolge wird als Platform::String^ projiziert. Diese Klasse stellt Methoden zum Erstellen und Bearbeiten von Zeichenfolgen zur Verfügung und ermöglicht, Zeichenfolgen in und aus wchar_t zu konvertieren.

Weitere Informationen finden Sie unter Zeichenfolgen (C++/CX).

Hh755822.collapse_all(de-de,VS.120).gifArrays

Windows-Runtime unterstützt eindimensionale Arrays beliebigen Typs. Arrays von Arrays werden nicht unterstützt. In C++/CX werden Windows-Runtime-Arrays als Platform::Array-Klasse projiziert.

Weitere Informationen finden Sie unter Array und WriteOnlyArray (C++/CX).

Hh755822.collapse_all(de-de,VS.120).gifReferenzklassen und Strukturen

Eine Windows-Runtime-Klasse wird in C++/CX als Verweisklasse oder Referenzstruktur projiziert, da diese nach Verweis kopiert werden. Die Speicherverwaltung für Verweisklassen und Referenzstrukturen erfolgt mittels der Verweiszählung transparent. Wenn der letzte Verweis auf ein Objekt außerhalb des gültigen Bereichs ist, wird das Objekt vernichtet. Eine Verweisklasse oder Referenzstruktur

  • kann als Member Konstruktoren, Methoden, Eigenschaften und Ereignisse enthalten. Diese Member können einen öffentlichen, privaten, geschützten oder internen Zugriff aufweisen.

  • kann private geschachtelte Enumerations-, Struktur- oder Klassendefinitionen enthalten.

  • kann direkt von einer Basisklasse erben und eine beliebige Anzahl von Schnittstellen implementieren. Alle Verweisklassen sind implizit konvertierbar in die Platform::Object-Klasse und können ihre virtuellen Methoden wie Object::ToString überschreiben.

Eine Verweisklasse, die über einen öffentlichen Konstruktor verfügt, muss als versiegelt deklariert werden, um eine weitere Ableitung zu verhindern.

Weitere Informationen finden Sie unter Verweisklassen und Strukturen (C++/CX)

Hh755822.collapse_all(de-de,VS.120).gifWertklassen und Strukturen

Eine Wertklasse oder Wertstruktur stellt eine grundlegende Datenstruktur dar und enthält nur Felder, die Wertklassen, Wertstrukturen oder vom Typ Platform::String^ sein können. Wertstrukturen und Wertklassen werden nach Wert kopiert.

Eine Wertstruktur kann auf NULL festlegbar gemacht werden, indem sie in einer IBox-Schnittstelle umgebrochen wird.

Weitere Informationen finden Sie unter Wertklassen und Strukturen (C++/CX).

Hh755822.collapse_all(de-de,VS.120).gifTeilklassen

Mit der Funktion der Teilklassen kann eine Klasse für mehrere Dateien definiert werden. Sie wird hauptsächlich dazu verwendet, um es Codegenerierungstools wie dem XAML-Editor ermöglichen, eine Datei zu ändern, ohne dass die Datei, die Sie bearbeiten, angefasst werden muss.

Weitere Informationen finden Sie unter Partielle Klassen (C++/CX).

Hh755822.collapse_all(de-de,VS.120).gifEigenschaften

Eine Eigenschaft ist ein öffentlicher Datenmember eines beliebigen Windows-Runtime-Typs und wird als GET/SET-Methodenpaar implementiert. Clientcode interpretiert eine Eigenschaft beim Zugriff als öffentliches Feld. Eine Eigenschaft, die keinen benutzerdefinierten GET- oder SET-Code erfordert, wird als trivial-Eigenschaft bezeichnet und kann ohne explizite GET- oder SET-Methoden deklariert werden.

Weitere Informationen finden Sie unter Eigenschaften (C++/CX).

Hh755822.collapse_all(de-de,VS.120).gifWindows-Runtime-Auflistungen in C++/CX

Windows-Runtime definiert einen Satz von Schnittstellen für Auflistungstypen, der von den verschiedenen Sprachen auf unterschiedliche Weise implementiert wird. C++/CX bietet Implementierungen in Platform::Collections::Vector-Klasse, Platform::Collections::Map-Klasse und anderen ähnlichen konkreten Auflistungstypen, die mit den jeweiligen Entsprechungen der Standardvorlagenbibliothek (STL) kompatibel sind.

Weitere Informationen finden Sie unter Auflistungen (C++/CX).

Hh755822.collapse_all(de-de,VS.120).gifVorlagenverweisklassen

Private und interne Verweisklassen können vorlagenbasiert und spezialisiert sein.

Weitere Informationen finden Sie unter Vorlagenverweisklassen (C++/CX).

Hh755822.collapse_all(de-de,VS.120).gifSchnittstellen

Eine Windows-Runtime-Schnittstelle definiert einen Satz von öffentlichen Eigenschaften, Methoden und Ereignissen, den eine Verweisklasse oder Referenzstruktur implementieren muss, wenn sie von der Schnittstelle erbt.

Weitere Informationen finden Sie unter Schnittstellen (C++/CX).

Hh755822.collapse_all(de-de,VS.120).gifEnumerationen

Eine Enumerationsklasse in Windows-Runtime ähnelt einer Enumeration mit Bereichseinschränkung in C++. Der zugrunde liegende Typ ist int32, es sei denn, das Attribut [Flags] kommt zur Anwendung. Dann ist der zugrunde liegende Typ uint32.

Weitere Informationen finden Sie unter Enumerationen (C++/CX).

Hh755822.collapse_all(de-de,VS.120).gifDelegaten

Ein Delegat in Windows-Runtime ist analog zu einem std::function-Objekt in C++. Es ist eine spezielle Verweisklasse, mit deren Hilfe vom Client bereitgestellte Funktionen aufgerufen werden, die kompatible Signaturen enthalten. Delegaten werden in Windows-Runtime am häufigsten als Typ eines Ereignisses verwendet.

Weitere Informationen finden Sie unter Delegaten (C++/CX).

Hh755822.collapse_all(de-de,VS.120).gifAusnahmen

In C++/CX können Sie benutzerdefinierte Ausnahmetypen, std::exception-Typen und Platform::Exception-Typen abfangen.

Weitere Informationen finden Sie unter Ausnahmen (C++/CX).

Hh755822.collapse_all(de-de,VS.120).gifEreignisse

Ein Ereignis ist ein öffentlicher Member in einer Verweisklasse oder einer Referenzstruktur mit einem Delegattyp als Typ. Ein Ereignis kann nur durch die besitzende Klasse aufgerufen, d. h. ausgelöst werden. Clientcode kann jedoch eigene Funktionen bereitstellen, die als Ereignishandler bezeichnet werden. Diese Ereignishandler werden aufgerufen, wenn die besitzende Klasse das Ereignis auslöst.

Weitere Informationen finden Sie unter Ereignisse (C++/CX).

Hh755822.collapse_all(de-de,VS.120).gifUmwandlung

C++/CX unterstützt die Standard-C++-Umwandlungsoperatoren static_cast, dynamic_cast und reinterpret_cast sowie den Operator safe_cast, der C++/CX-spezifisch ist.

Weitere Informationen finden Sie unter Umwandlung von Typen (C++/CX).

Hh755822.collapse_all(de-de,VS.120).gifBoxing

Eine geschachtelte Variable ist ein Werttyp, der in einem Referenztyp in Situationen umschlossen wird, in denen eine Verweissemantik erforderlich ist.

Weitere Informationen finden Sie unter Boxing (C++/CX).

Hh755822.collapse_all(de-de,VS.120).gifAttribute

Ein Attribut ist ein Metadatenwert, der auf jeden beliebigen Windows-Runtime-Typ oder -Typmember angewendet und zur Laufzeit überprüft werden kann. Windows-Runtime definiert einen Satz allgemeiner Attribute im Windows::Foundation::Metadata-Namespace. Benutzerdefinierte Attribute in öffentlichen Schnittstellen werden in dieser Version nicht von Windows-Runtime unterstützt.

Beschreibt, wie öffentliche API als veraltet markiert werden, indem das gleiche Attribute wie bei den Windows-Runtime-Systemtypen verwendet wird.

Weitere Informationen finden Sie unter Einstufen von Typen und Membern als veraltet (C++/CX).

Community-Beiträge

Anzeigen:
© 2014 Microsoft