C++/WinRTC++/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.C++/WinRT is an entirely standard modern C++17 language projection for Windows Runtime (WinRT) APIs, implemented as a header-file-based library, and designed to provide you with first-class access to the modern Windows API. Mit C++/WinRT können Sie Windows-Runtime-APIs mit jedem standardkonformen C++17-Compiler erstellen und verwenden.With C++/WinRT, you can author and consume Windows Runtime APIs using any standards-compliant C++17 compiler. Das in Version 10.0.17134.0 (Windows 10, Version 1803) eingeführte Windows SDK enthält C++/WinRT.The Windows SDK includes C++/WinRT; it was introduced in version 10.0.17134.0 (Windows 10, version 1803).

C++/WinRT ist für Entwickler gedacht, die schönen und schnellen Code für Windows schreiben möchten.C++/WinRT is for any developer interested in writing beautiful and fast code for Windows. Die Begründung hierfür finden Sie unten.Here's why.

Vorteile von C++/WinRTThe case for 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.The C++ programming language is used both in the enterprise and independent software vendor (ISV) segments for applications where high levels of correctness, quality, and performance are valued. Dies sind zum Beispiel: Systemprogrammierung, integrierte und mobile Systeme mit Ressourcenbeschränkung, Spiele und Grafiken, Gerätetreiber und industrielle, wissenschaftliche und medizinische Anwendungen.For example: systems programming; resource-constrained embedded and mobile systems; games and graphics; device drivers; and industrial, scientific, and medical applications, to name but some.

Aus Sicht der Sprache ging es bei C++ immer darum, Abstraktionen zu erstellen und zu nutzen, die sowohl typenreich als auch einfach sind.From a language point of view, C++ has always been about authoring and consuming abstractions that are both type-rich and lightweight. 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.But the language has changed radically since the raw pointers, raw loops, and painstaking memory allocation and releasing of C++98. Modernes C++ (ab C++11) ist ideenreicher, einfacher, lesbarer und viel weniger fehleranfällig.Modern C++ (from C++11 onward) is about clear expression of ideas, simplicity, readability, and a much lower likelihood of introducing bugs.

Für die Erstellung und Nutzung von Windows-Runtime-APIs mit C++ gibt es C++/WinRT.For authoring and consuming Windows Runtime APIs using C++, there is C++/WinRT. Dies ist der von Microsoft empfohlene Ersatz für die C++/CX-Programmiersprache und die C++-Vorlagenbibliothek für Windows-Runtime (WRL).This is Microsoft's recommended replacement for the C++/CX language projection, and the Windows Runtime C++ Template Library (WRL).

Mit C++/WinRT verwenden Sie Standard-C++ Datentypen, -Algorithmen und -Schlüsselwörter.You use standard C++ data types, algorithms, and keywords when you use C++/WinRT. 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.The projection does have its own custom data types, but in most cases you don't need to learn them because they provide appropriate conversions to and from standard types. Auf diese Weise können Sie weiterhin die gewohnten Standardsprachfunktionen von C++ und den bereits vorhandenen Quellcode verwenden.That way, you can continue to use the standard C++ language features that you're accustomed to using, and the source code that you already have. C++/WinRT macht es extrem einfach, Windows-Runtime-APIs in jeder C++ Anwendung aufzurufen – von Win32 bis UWP.C++/WinRT makes it extremely easy to call Windows Runtime APIs in any C++ application, from Win32 to UWP.

C++/WinRT arbeitet besser und erzeugt kleinere Binärdateien als jede andere Sprachoption für die Windows-Runtime.C++/WinRT performs better and produces smaller binaries than any other language option for the Windows Runtime. Sie übertrifft sogar handgeschriebenen Code, der die ABI-Schnittstellen direkt nutzt.It even outperforms handwritten code using the ABI interfaces directly. Dies liegt daran, dass die Abstraktionen moderne C++-Idiome verwenden, die vom Visual C++ Compiler optimiert werden.That's because the abstractions use modern C++ idioms that the Visual C++ compiler is designed to optimize. 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.This includes magic statics, empty base classes, strlen elision, as well as many newer optimizations in the latest version of Visual C++ targeted specifically at improving the performance of C++/WinRT.

Themen zu C++/WinRTTopics about C++/WinRT

ThemaTopic BeschreibungDescription
Einführung in C++/WinRTIntroduction to C++/WinRT Enthält eine Einführung in C++/WinRT – eine Standard C++ Sprachprojektion für Windows-Runtime-APIs.An introduction to C++/WinRT—a standard C++ language projection for Windows Runtime APIs.
Erste Schritte mit C++/WinRTGet started with C++/WinRT Damit Sie C++/WinRT schneller verwenden können, werden in diesem Thema einige einfache Codebeispiele vorgestellt.To get you up to speed with using C++/WinRT, this topic walks through a simple code example.
Neuigkeiten in C++/WinRTWhat's new in C++/WinRT Neuigkeiten und Änderungen von C++/WinRT.News and changes to C++/WinRT.
Häufig gestellte FragenFrequently-asked questions Antworten auf Fragen zur Erstellung und Nutzung von Windows-Runtime-APIs mit C++/WinRT.Answers to questions that you're likely to have about authoring and consuming Windows Runtime APIs with C++/WinRT.
ProblembehandlungTroubleshooting 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.The table of troubleshooting symptoms and remedies in this topic may be helpful to you whether you're cutting new code or porting an existing app.
C++/WinRT-Beispielanwendung eines Foto-EditorsPhoto Editor C++/WinRT sample application Foto-Editor ist eine UWP-Beispielanwendung, die das Entwickeln von Apps mit der C++/WinRT-Programmiersprache veranschaulicht.Photo Editor is a UWP sample application that showcases development with the C++/WinRT language projection. Mit der Beispielanwendung können Sie Fotos aus der Bibliothek Bilder abrufen und dann das ausgewählte Bild mit verschiedenen Fotoeffekten bearbeiten.The sample application allows you to retrieve photos from the Pictures library, and then edit the selected image with assorted photo effects.
String-VerarbeitungString handling Mit C++/WinRT können Sie Windows-Runtime-APIs mit C++-String-Standardtypen aufrufen, oder Sie können den Typ winrt::hstring verwenden.With C++/WinRT, you can call Windows Runtime APIs using standard C++ wide string types, or you can use the winrt::hstring type.
C++-Standarddatentypen und C++/WinRTStandard C++ data types and C++/WinRT Mit C++/WinRT können Sie Windows-Runtime-APIs über C++-Standarddatentypen aufrufen.With C++/WinRT, you can call Windows Runtime APIs using Standard C++ data types.
Boxing und Unboxing von Einzelwerten für IInspectableBoxing and unboxing scalar values to IInspectable Ein Einzelwert muss in ein Referenzklassenobjekt gepackt werden, bevor er an eine Funktion übergeben wird, die IInspectable erwartet.A scalar value needs to be wrapped inside a reference class object before being passed to a function that expects IInspectable. Dieser Wrapping-Prozess wird als Boxing des Werts bezeichnet.That wrapping process is known as boxing the value.
Verwenden von APIs mit C++/WinRTConsume APIs with C++/WinRT In diesem Thema wird gezeigt, wie vom Benutzer selbst, von Windows oder von Drittanbietern implementierte C++/WinRT-APIs verwendet werden.This topic shows how to consume C++/WinRT APIs, whether they're implemented by Windows, a third-party component vendor, or by yourself.
Erstellen von APIs mit C++/WinRTAuthor APIs with C++/WinRT Dieses Thema zeigt, wie C++/WinRT-APIs mithilfe der winrt::implements-Basisstruktur direkt oder indirekt erstellt werden.This topic shows how to author C++/WinRT APIs by using the winrt::implements base struct, either directly or indirectly.
Fehlerbehandlung bei C++/WinRTError handling with C++/WinRT In diesem Thema werden Strategien zur Behandlung von Fehlern bei der Programmierung mit C++/WinRT erörtert.This topic discusses strategies for handling errors when programming with C++/WinRT.
Verarbeiten von Ereignissen über DelegatenHandle events by using delegates Dieses Thema zeigt, wie Event-Handling-Delegaten mit C++/WinRT registriert und widerrufen werden.This topic shows how to register and revoke event-handling delegates using C++/WinRT.
Erstellen von EreignissenAuthor events Dieses Thema zeigt, wie eine Komponente für Windows-Runtime erstellt wird, die eine Laufzeitklasse zum Auslösen von Ereignissen enthält.This topic demonstrates how to author a Windows Runtime component containing a runtime class that raises events. Es zeigt außerdem eine App, die die Komponente nutzt und die Ereignisse verarbeitet.It also demonstrates an app that consumes the component and handles the events.
Sammlungen mit C++/WinRTCollections with C++/WinRT C++/WinRT verfügt über Funktionen und Basisklassen, mit denen Sie beim Implementieren bzw. Übergeben von Sammlungen viel Zeit sparen können.C++/WinRT provides functions and base classes that save you a lot of time and effort when you want to implement and/or pass collections.
Parallelität und asynchrone VorgängeConcurrency and asynchronous operations Dieses Thema zeigt, wie Sie asynchrone Windows-Runtime-Objekte mit C++/WinRT erstellen und nutzen können.This topic shows the ways in which you can both create and consume Windows Runtime asynchronous objects with C++/WinRT.
Erweiterte Parallelität und AsynchronieMore advanced concurrency and asynchrony Weitere erweiterte Szenarien mit Parallelität und Asynchronie in C++/WinRT.More advanced scenarios with concurrency and asynchrony in C++/WinRT.
XAML-Steuerelemente; Binden an eine C++/WinRT-EigenschaftXAML controls; bind to a C++/WinRT property Eine Eigenschaft, die effektiv an ein XAML-Steuerelement gebunden werden kann, wird als Observable-Eigenschaft bezeichnet.A property that can be effectively bound to a XAML control is known as an observable property. Dieses Thema zeigt, wie man eine Observable-Eigenschaft implementiert und nutzt und ein XAML-Steuerelement daran bindet.This topic shows how to implement and consume an observable property, and how to bind a XAML control to it.
XAML-Elementsteuerelemente; Binden an eine C++/WinRT-SammlungXAML items controls; bind to a C++/WinRT collection Eine Sammlung, die effektiv an ein XAML-Elementsteuerelement gebunden werden kann, wird als Observable-Sammlung bezeichnet.A collection that can be effectively bound to a XAML items control is known as an observable collection. Dieses Thema zeigt, wie man eine Observable-Sammlung implementiert und nutzt und wie man ein XAML-Elementsteuerelement daran bindet.This topic shows how to implement and consume an observable collection, and how to bind a XAML items control to it.
Benutzerdefinierte (vorlagenbasierte) XAML-Steuerelemente mit C++/WinRTXAML custom (templated) controls with C++/WinRT In diesem Thema werden die Schritte zum Erstellen eines einfachen benutzerdefinierten Steuerelements mit C++/WinRT beschrieben.This topic walks you through the steps of creating a simple custom control using C++/WinRT. Sie können diese Informationen nutzen, um Ihre eigenen Benutzeroberflächen-Steuerelemente mit vielen Funktionen und Anpassungsmöglichkeiten zu erstellen.You can build on the info here to create your own feature-rich and customizable UI controls.
Übergabe von Parametern in die ABI-GrenzePassing parameters into the ABI boundary C++/WinRT vereinfacht die Übergabe von Parametern in die ABI-Grenze, indem automatische Konvertierungen für gängige Fälle bereitgestellt werden.C++/WinRT simplifies passing parameters into the ABI boundary by providing automatic conversions for common cases.
Verwenden von COM-Komponenten mit C++/WinRTConsume COM components with 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.This topic uses a full Direct2D code example to show how to use C++/WinRT to consume COM classes and interfaces.
Erstellen von COM-Komponenten mit C++/WinRTAuthor COM components with 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.C++/WinRT can help you to author classic COM components, just as it helps you to author Windows Runtime classes.
Umstellen von C++/CX auf C++/WinRTMove to C++/WinRT from C++/CX In diesem Thema wird gezeigt, wie Sie C++/CX-Code zum entsprechenden Äquivalent in C++/WinRT portieren.This topic shows how to port C++/CX code to its equivalent in C++/WinRT.
Interoperabilität zwischen C++/WinRT und C++/CXInterop between C++/WinRT and C++/CX In diesem Thema werden zwei Hilfsfunktionen gezeigt, die verwendet werden können, um zwischen C++/CX- und C++/WinRT-Objekten zu konvertieren.This topic shows two helper functions that can be used to convert between C++/CX and C++/WinRT objects.
Umstellen von WRL auf C++/WinRTMove to C++/WinRT from WRL In diesem Thema wird gezeigt, wie Sie Code der C++-Vorlagenbibliothek für Windows-Runtime (WRL) zum entsprechenden Äquivalent in C++/WinRT portieren.This topic shows how to port Windows Runtime C++ Template Library (WRL) code to its equivalent in C++/WinRT.
Umstellen von C# auf C++/WinRTMove to C++/WinRT from C# In diesem Thema wird gezeigt, wie Sie C#-Code zum äquivalenten Code in C++/WinRT portieren.This topic shows how to port C# code to its equivalent in C++/WinRT.
Interoperabilität zwischen C++/WinRT und der ABIInterop between C++/WinRT and the ABI Dieses Thema zeigt, wie man zwischen Application Binary Interface (ABI) und C++/WinRT-Objekten konvertiert.This topic shows how to convert between application binary interface (ABI) and C++/WinRT objects.
Starke und schwache Verweise in C++/WinRTStrong and weak references 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.The Windows Runtime is a reference-counted system; and in such a system it's important for you to know about the significance of, and distinction between, strong and weak references.
Agile ObjekteAgile objects Ein agiles Objekt ist ein Objekt, auf das von jedem Thread aus zugegriffen werden kann.An agile object is one that can be accessed from any thread. Ihre C++/WinRT-Typen sind standardmäßig agil, aber Sie können diese Option auch deaktivieren.Your C++/WinRT types are agile by default, but you can opt out.
Diagnostizieren direkter ZuordnungenDiagnosing direct allocations 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.This topic goes in-depth on a C++/WinRT 2.0 feature that helps you diagnose the mistake of creating an object of implementation type on the stack, rather than using the winrt::make family of helpers, as you should.
Erweiterungspunkte für Ihre ImplementierungstypenExtension points for your implementation types 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.These extension points in C++/WinRT 2.0 allow you to defer destruction of your implementation types, to safely query during destruction, and to hook the entry into and exit from your projected methods.
Eine einfache C++/WinRT-Windows-UI-BeispielbibliothekA simple C++/WinRT Windows UI Library example Dieses Thema führt Sie durch den Prozess zum Hinzufügen von einfacher Unterstützung für WinUI innerhalb eines C++/WinRT-Projekts.This topic walks you through the process of adding simple support for WinUI within a C++/WinRT project.

Themen zur C++-SpracheTopics about the C++ language

ThemaTopic BeschreibungDescription
Wertekategorien und zugehörige VerweiseValue categories, and references to them In diesem Thema werden die verschiedenen Kategorien von Werten beschrieben, die in C++ vorhanden sind.This topic describes the various categories of values that exist in C++. Sie haben sicherlich schon von „lvalues“ und „rvalues“ gehört, aber es gibt auch andere Arten.You will doubtless have heard of lvalues and rvalues, but there are other kinds, too.

Wichtige APIsImportant APIs