C++/WinRT

C++/WinRT ist eine vollständig standardisierte, moderne C++17-Programmiersprache für Windows-Runtime-APIs (WinRT), die als headerdateibasierte Bibliothek implementiert ist und Ihnen einen erstklassigen Zugriff auf die moderne Windows-API bietet. Mit C++/WinRT können Sie Windows-Runtime-APIs mit jedem standardkonformen C++17-Compiler erstellen und verwenden. Das in Version 10.0.17134.0 (Windows 10, Version 1803) eingeführte Windows SDK enthält C++/WinRT.

C++/WinRT ist für Entwickler gedacht, die schönen und schnellen Code für Windows schreiben möchten. Die Begründung hierfür finden Sie unten.

Vorteile von C++/WinRT

 

Die Programmiersprache C++ wird sowohl im Enterprise- als auch im Independent Software Vendor (ISV)-Segment für Anwendungen eingesetzt, bei denen ein hohes Maß an Korrektheit, Qualität und Leistung wichtig ist. Dies sind zum Beispiel: Systemprogrammierung, integrierte und mobile Systeme mit Ressourcenbeschränkung, Spiele und Grafiken, Gerätetreiber und industrielle, wissenschaftliche und medizinische Anwendungen.

Aus Sicht der Sprache ging es bei C++ immer darum, Abstraktionen zu erstellen und zu nutzen, die sowohl typenreich als auch einfach sind. Aber die Sprache hat sich seit den grundlegenden Zeigern und Schleifen und der mühsamen Speicherzuweisung und -freigabe von C++ aus dem Jahr 1998 radikal verändert. Modernes C++ (ab C++11) ist ideenreicher, einfacher, lesbarer und viel weniger fehleranfällig.

Für die Erstellung und Nutzung von Windows-APIs mit C++ gibt es C++/WinRT. Dies ist der von Microsoft empfohlene Ersatz für die C++/CX-Programmiersprache und die C++-Vorlagenbibliothek für Windows-Runtime (WRL).

Mit C++/WinRT verwenden Sie Standard-C++ Datentypen, -Algorithmen und -Schlüsselwörter. Die Projektion hat ihre eigenen benutzerdefinierten Datentypen, aber in den meisten Fällen müssen Sie sie nicht kennen, da es entsprechende Konvertierungen in und aus Standardtypen gibt. Auf diese Weise können Sie weiterhin die gewohnten Standardsprachfunktionen von C++ und den bereits vorhandenen Quellcode verwenden. C++/WinRT macht es extrem einfach, Windows-Runtime-APIs in jeder C++ Anwendung aufzurufen – von Win32 bis UWP.

C++/WinRT arbeitet besser und erzeugt kleinere Binärdateien als jede andere Sprachoption für die Windows-Runtime. Sie übertrifft sogar handgeschriebenen Code, der die ABI-Schnittstellen direkt nutzt. Dies liegt daran, dass die Abstraktionen moderne C++-Idiome verwenden, die vom Visual C++ Compiler optimiert werden. Hierzu gehören magische Statics, leere Basisklassen, strlen-Elision, sowie viele neuere Optimierungen in der neuesten Version von Visual C++, die speziell auf die Verbesserung der Performance von C++/WinRT abzielen.

Es gibt Möglichkeiten für die schrittweise Einführung von C++/WinRT in Ihre Projekte. Sie können Komponenten für Windows-Runtime verwenden oder mit C++/CX interagieren. Weitere Informationen finden Sie unter Interoperabilität zwischen C++/WinRT und C++/CX.

Informationen zur Portierung nach C++/WinRT finden Sie in diesen Ressourcen.

Siehe auch Wo finde ich C++/WinRT-Beispiel-Apps?.

Themen zu C++/WinRT

Thema BESCHREIBUNG
Einführung in C++/WinRT Enthält eine Einführung in C++/WinRT – eine Standard C++ Sprachprojektion für Windows-Runtime-APIs.
Erste Schritte mit C++/WinRT Damit Sie C++/WinRT schneller verwenden können, werden in diesem Thema einige einfache Codebeispiele vorgestellt.
Neuigkeiten in C++/WinRT Neuigkeiten und Änderungen von C++/WinRT.
Häufig gestellte Fragen Antworten auf Fragen zur Erstellung und Nutzung von Windows-Runtime-APIs mit C++/WinRT.
Problembehandlung Die Tabelle mit den Symptomen und Problembehandlungen in diesem Thema kann für Sie hilfreich sein. Hierbei spielt es keine Rolle, ob Sie neuen Code schreiben oder eine bestehende App portieren.
C++/WinRT-Beispielanwendung eines Foto-Editors Foto-Editor ist eine UWP-Beispielanwendung, die das Entwickeln von Apps mit der C++/WinRT-Programmiersprache veranschaulicht. Mit der Beispielanwendung können Sie Fotos aus der Bibliothek Bilder abrufen und dann das ausgewählte Bild mit verschiedenen Fotoeffekten bearbeiten.
String-Verarbeitung Mit C++/WinRT können Sie Windows-Runtime-APIs mit C++-String-Standardtypen aufrufen, oder Sie können den Typ winrt::hstring verwenden.
C++-Standarddatentypen und C++/WinRT Mit C++/WinRT können Sie Windows-Runtime-APIs über C++-Standarddatentypen aufrufen.
Boxing und Unboxing von Werten für „IInspectable“ Ein Einzel- oder Arraywert muss in ein Referenzklassenobjekt gepackt werden, bevor er an eine Funktion übergeben wird, die IInspectable erwartet. Dieser Wrapping-Prozess wird als Boxing des Werts bezeichnet.
Verwenden von APIs mit C++/WinRT In diesem Thema wird gezeigt, wie vom Benutzer selbst, von Windows oder von Drittanbietern implementierte C++/WinRT-APIs verwendet werden.
Erstellen von APIs mit C++/WinRT Dieses Thema zeigt, wie C++/WinRT-APIs mithilfe der winrt::implements-Basisstruktur direkt oder indirekt erstellt werden.
Fehlerbehandlung bei C++/WinRT In diesem Thema werden Strategien zur Behandlung von Fehlern bei der Programmierung mit C++/WinRT erörtert.
Verarbeiten von Ereignissen über Delegaten Dieses Thema zeigt, wie Event-Handling-Delegaten mit C++/WinRT registriert und widerrufen werden.
Erstellen von Ereignissen Dieses Thema zeigt, wie eine Komponente für Windows-Runtime erstellt wird, die eine Laufzeitklasse zum Auslösen von Ereignissen enthält. Es zeigt außerdem eine App, die die Komponente nutzt und die Ereignisse verarbeitet.
Sammlungen mit C++/WinRT C++/WinRT verfügt über Funktionen und Basisklassen, mit denen Sie beim Implementieren bzw. Übergeben von Sammlungen viel Zeit sparen können.
Parallelität und asynchrone Vorgänge Dieses Thema zeigt, wie Sie asynchrone Windows-Runtime-Objekte mit C++/WinRT erstellen und nutzen können.
Erweiterte Parallelität und Asynchronie Erweiterte Szenarien mit Parallelität und Asynchronie in C++/WinRT.
Beispiel für eine Abschlussquelle Zeigt, wie Sie Ihre eigene Abschlussquellenklasse erstellen und nutzen können.
XAML-Steuerelemente; Binden an eine C++/WinRT-Eigenschaft Eine Eigenschaft, die effektiv an ein XAML-Steuerelement gebunden werden kann, wird als Observable-Eigenschaft bezeichnet. Dieses Thema zeigt, wie man eine Observable-Eigenschaft implementiert und nutzt und ein XAML-Steuerelement daran bindet.
XAML-Elementsteuerelemente; Binden an eine C++/WinRT-Sammlung Eine Sammlung, die effektiv an ein XAML-Elementsteuerelement gebunden werden kann, wird als Observable-Sammlung bezeichnet. Dieses Thema zeigt, wie man eine Observable-Sammlung implementiert und nutzt und wie man ein XAML-Elementsteuerelement daran bindet.
Benutzerdefinierte (vorlagenbasierte) XAML-Steuerelemente mit C++/WinRT In diesem Thema werden die Schritte zum Erstellen eines einfachen benutzerdefinierten Steuerelements mit C++/WinRT beschrieben. Sie können diese Informationen nutzen, um Ihre eigenen Benutzeroberflächen-Steuerelemente mit vielen Funktionen und Anpassungsmöglichkeiten zu erstellen.
Übergeben von Parametern an projizierte APIs C++/WinRT vereinfacht die Übergabe von Parametern an projektierte APIs durch die Bereitstellung automatischer Konvertierungen für häufige Fälle.
Verwenden von COM-Komponenten mit C++/WinRT In diesem Thema wird anhand eines vollständigen Direct2D-Codebeispiels verdeutlicht, wie Sie C++/WinRT für die Nutzung von COM-Klassen und -Schnittstellen verwenden.
Erstellen von COM-Komponenten mit C++/WinRT C++/WinRT dient Ihnen als Hilfe beim Erstellen von klassischen COM-Komponenten, wie dies auch für Windows-Runtime-Klassen der Fall ist.
Umstellen von C++/CX auf C++/WinRT In diesem Thema werden die technischen Details der Portierung von Quellcode in einem C++/CX-Projekt zum entsprechenden Äquivalent in C++/WinRT beschrieben.
Interoperabilität zwischen C++/WinRT und C++/CX In diesem Thema werden zwei Hilfsfunktionen für die Konvertierung zwischen C++/CX- und C++/WinRT-Objekten gezeigt.
Asynchronität und Interoperabilität zwischen C++/WinRT und C++/CX Dies ist ein fortgeschrittenes Thema im Zusammenhang mit der schrittweisen Portierung von C++/CX nach C++/WinRT. Es wird gezeigt, wie Aufgaben und Co-Routinen der Parallel Patterns Library (PPL) im selben Projekt nebeneinander existieren können.
Umstellen von WRL auf C++/WinRT In diesem Thema wird gezeigt, wie Sie Code der C++-Vorlagenbibliothek für Windows-Runtime (WRL) zum entsprechenden Äquivalent in C++/WinRT portieren.
Portieren des Beispiels „Zwischenablage“ (Clipboard) von C# zu C++/WinRT –eine Fallstudie Dieses Thema enthält eine Fallstudie für das Portieren einer der UWP-App-Beispiele (Universal Windows Platform) von C# nach C++/WinRT. Sie können Praxis und Erfahrung mit dem Portieren sammeln, indem Sie der exemplarischen Vorgehensweise folgen und in deren Verlauf das Beispiel für sich selbst portieren.
Umstellen von C# auf C++/WinRT Dieses Thema enthält einen umfassenden Katalog der technischen Details der Portierung des Quellcodes in einem C#-Projekt zum entsprechenden Äquivalent in C++/WinRT-.
Interoperabilität zwischen C++/WinRT und der ABI Dieses Thema zeigt, wie man zwischen Application Binary Interface (ABI) und C++/WinRT-Objekten konvertiert.
Starke und schwache Verweise in C++/WinRT Windows-Runtime ist ein System mit Verweiszählung. Es ist wichtig, dass Sie mit der Bedeutung und dem Unterschied zwischen starken und schwachen Verweisen vertraut sind.
Agile Objekte Ein agiles Objekt ist ein Objekt, auf das von jedem Thread aus zugegriffen werden kann. Ihre C++/WinRT-Typen sind standardmäßig agil, aber Sie können diese Option auch deaktivieren.
Diagnostizieren direkter Zuordnungen Dieses Thema erläutert eingehend ein C++/WinRT 2.0-Feature, das Ihnen beim Diagnostizieren eines Fehlers hilft, der entsteht, weil ein Objekt des Implementierungstyps im Stapel statt wie vorgesehen durch Verwendung der winrt::make-Hilfsprogrammfamilie erstellt wurde.
Erweiterungspunkte für Ihre Implementierungstypen Mit diesen Erweiterungspunkten in C++/WinRT 2.0 können Sie die Zerstörung ihrer Implementierungstypen hinausschieben, um eine sichere Abfrage während der Zerstörung zu ermöglichen, einen Hook für den Eintrag zur Verfügung zu haben und Ihre projektierten Methoden zu beenden.
Eine grundlegendes Beispiel für die Windows-UI-Bibliothek 2 für C++/WinRT (UWP) Dieses Thema führt durch den Prozess zum Hinzufügen einer grundlegenden Unterstützung für die Windows-UI-Bibliothek (WinUI) zu einem UWP-Projekt für C++/WinRT. Insbesondere befasst sich dieses Thema mit WinUI 2, das für UWP-Apps bestimmt ist.
Windows-Runtime-Komponenten mit C++/WinRT In diesem Thema wird beschrieben, wie Sie eine Windows-Runtime-Komponente mit C++/WinRT erstellen und nutzen – eine Komponente, die aus einer universellen Windows-App aufgerufen werden kann, die in einer der Windows-Runtime-Sprachen erstellt wurde.
Erstellen einer C#-Komponente für Windows-Runtime zur Verwendung aus einer C++/WinRT-App Dieses Thema führt Sie durch den Prozess des Hinzufügens einer einfachen C#-Komponente zu Ihrem C++/WinRT-Projekt.
Visual Studio Native Debugvisualisierung (natvis) für C++/WinRT Mit der C++/WinRT Visual Studio Extension (VSIX) erhalten Sie die Native Debugvisualisierung (natvis) von Visual Studio für C++/WinRT-Projekttypen. Dadurch erreichen Sie ein ähnliches Verhalten wie beim Debuggen von C#.
Konfigurationsmakros In diesem Thema werden die C++/WinRT-Konfigurationsmakros beschrieben.
C++/WinRT-Benennungskonventionen In diesem Thema werden Benennungskonventionen erläutert, die durch C++/WinRT eingeführt wurden.

Themen zur C++-Sprache

Thema BESCHREIBUNG
Wertekategorien und zugehörige Verweise In diesem Thema werden die verschiedenen Kategorien von Werten beschrieben, die in C++ vorhanden sind. Sie haben sicherlich schon von „lvalues“ und „rvalues“ gehört, aber es gibt auch andere Arten.

Wichtige APIs