Portieren auf die universelle Windows-Plattform (C++)Porting to the Universal Windows Platform (C++)

In diesem Thema finden Sie Informationen zum Portieren von vorhandenem C++-Code auf die Windows-10-Anwendungsplattform, die universelle Windows-Plattform.In this topic, you can find information on how to port existing C++ code to the Windows 10 app platform, the Universal Windows Platform. Der Begriff " universell " bedeutet, dass Ihr Code auf allen Geräten ausgeführt werden kann, auf denen Windows 10 ausgeführt wird.What is meant by the term universal is that your code can run on any of the devices that run Windows 10. Erstellen Sie ein einzelnes Projekt und eine einzelne XAML-basierte Benutzeroberfläche, die auf allen Geräten mit Windows 10 funktioniert.You create a single project and a single XAML-base user interface that works well on any device that runs Windows 10. Sie können dynamische Layout-Features in XAML verwenden, damit sich die Benutzeroberfläche der App an die unterschiedlichen Displaygrößen anpassen lässt.You can use dynamic layout features in XAML to allow the app's UI to adapt to different display sizes.

Die Windows-Entwicklungscenter-Dokumentation enthält eine Anleitung zum Portieren von Windows 8.1-Apps auf die universelle Windows-Plattform.The Windows Dev Center documentation contains a guide for porting Windows 8.1 apps to the Universal Windows Platform. Weitere Informationen finden Sie unter Wechsel von Windows-Runtime 8 zu UWP.See Move from Windows Runtime 8 to UWP. Obwohl sich das Handbuch vor allem auf C#-Code konzentriert, gilt ein Großteil der Anleitung für C++.Although the guide focuses mostly on C# code, most of the guidance is applicable to C++. In den folgenden Vorgehensweisen finden Sie detailliertere Informationen.The following procedures contain more detailed information. Siehe auch Wechseln von einer Desktop Anwendung zu einer UWP-Anwendung.See also Move from a desktop application to UWP.

Dieses Thema enthält die folgenden Verfahren zum Portieren von Code für die UWP.This topic contains the following procedures for porting code to the UWP.

Wenn Sie über eine klassische Wind32-DLL-Datei für Desktopcomputer verfügen und sie über eine UWP-Anwendung aufrufen möchten, können Sie dies ebenfalls vornehmen.If you have a classic desktop Win32 DLL and you want to call it from a UWP application, you can do that as well. Auf diese Weise können Sie eine UWP-Benutzeroberflächenebene für eine vorhandene klassische Windows C++-Desktopcomputeranwendung oder Ihren plattformübergreifenden C++-Standardcode erstellen.Using such procedures, you can create a UWP user interface layer for an existing classic Windows desktop C++ application, or your cross-platform standard C++ code. Siehe Vorgehensweise: Verwenden von vorhandenem C++-Code in einer universelle Windows-Plattform-App.See How to: Use Existing C++ Code in a Universal Windows Platform App.

Portieren einer Windows 8.1 Store-App auf UWPPorting a Windows 8.1 Store App to the UWP

Wenn Sie eine Windows 8.1 Store-App haben, können Sie sie mithilfe dieses Verfahrens auf jedem Gerät mit Windows 10 unter UWP ausführen.If you have a Windows 8.1 Store App, you can use this procedure to get it working on the UWP and any device that runs Windows 10. Es empfiehlt sich, zunächst das Projekt mit Visual Studio 2019 als Windows 8.1 Projekt zu erstellen, um zunächst alle Probleme zu vermeiden, die durch Änderungen im Compiler und in den Bibliotheken entstehen.It's a good idea to first build the project with Visual Studio 2019 as a Windows 8.1 project, to first eliminate any issues that arise from changes in the compiler and libraries. Nachdem Sie dies vorgenommen haben, gibt es zwei Möglichkeiten, um dies zu einem Windows 10-UWP-Projekt umzuwandeln.Once you've done that, there are two ways to convert this to a Windows 10 UWP project. Die einfachste Möglichkeit (wird in der folgenden Vorgehensweise erläutert) besteht darin, indem Sie ein universelles Windows-Projekt erstellen und Ihren vorhandenen Code hineinkopieren.The easiest way (as explained in the following procedure) is to create a Universal Windows project, and copy your existing code into it. Wenn Sie ein universelles Projekt für Windows 8.1-Desktopcomputer und Windows Phone 8.1 verwendet haben, beginnt das Projekt zwei unterschiedliche Layouts in XAML, endet jedoch mit einem einzelnen dynamischen Layout, das die Größe anpasst.If you were using a Universal project for Windows 8.1 desktop and Windows 8.1 Phone, your project will start with two different layouts in XAML but end with a single dynamic layout that adjusts to the display size.

So portieren Sie einer Windows 8.1 Store-App auf UWPTo port a Windows 8.1 Store App to the UWP

  1. Falls noch nicht erfolgt, öffnen Sie Ihr Windows 8.1-App-Projekt in Visual Studio 2017, und befolgen Sie die Anweisungen zum Aktualisieren der Projektdatei.If you have not already done so, open your Windows 8.1 App project in Visual Studio 2017, and follow the instructions to upgrade the project file.

    Sie müssen die Windows 8.1-Tools im Visual Studio-Setup installiert haben.You need to have installed the Windows 8.1 Tools in Visual Studio setup. Wenn Sie diese Tools nicht installiert haben, starten Sie das Visual Studio-Setup über das Fenster Programme und Funktionen. Klicken Sie auf Visual Studio 2017, und wählen Sie im Setup-Fenster Ändern aus.If you don't have those tools installed, start Visual Studio setup from the Programs and Features window, choose Visual Studio 2017, and in the setup window, choose Modify. Suchen Sie nach Windows 8.1-Tools, stellen Sie sicher, dass diese Option ausgewählt ist, und klicken Sie auf OK.Locate Windows 8.1 Tools, make sure it is selected, and choose OK.

  2. Öffnen Sie das Fenster Projekteigenschaften, und legen Sie unter C++ > Allgemein das Plattformtoolset auf v141 (das Toolset für Visual Studio 2017) fest.Open the Project Properties window, and under C++ > General, set the Platform Toolset to v141, the toolset for Visual Studio 2017.

  3. Erstellen Sie das Projekt als Windows 8.1-Projekt, und lösen Sie alle Buildfehler.Build the project as a Windows 8.1 project, and address any build errors. Fehler in dieser Phase liegen wahrscheinlich an wichtigen Änderungen an den Build-Tools und Bibliotheken.Any errors at this stage are probably due to breaking changes in the build tools and libraries. Unter Änderungsverlauf von Visual C++ von 2003 bis 2015 finden Sie eine ausführliche Erläuterung der Änderungen, die sich auf Ihren Code auswirken.See Visual C++ change history 2003 - 2015 for a detailed explanation of the changes that might affect your code.

    Nachdem das Projekt ordnungsgemäß erstellt wurde, können Sie es auf universelles Windows (Windows 10) portieren.Once your project builds cleanly, you are ready to port to Universal Windows (Windows 10).

  4. Erstellen Sie ein neues universelles Windows-App-Projekt mit der leeren Vorlage.Create a new Universal Windows App project using the Blank template. Sie möchten dem Projekt möglicherweise den gleichen Namen wie dem vorhandenen Projekt geben, obwohl sich die Projekte dazu in unterschiedlichen Verzeichnissen befinden müssen.You might want to give it the same name as your existing project, although to do that the projects must be in different directories.

  5. Schließen Sie die Projektmappe, und verwenden Sie dann den Windows Explorer oder die Befehlszeile, kopieren Sie die Codedateien (mit den Dateierweiterungen CPP, H und XAML) aus Ihrem Windows 8.1-Projekt in denselben Ordner wie die Projektdatei (VCXPROJ) für das Projekt, das Sie in Schritt 1 erstellt haben.Close the solution, and then using Windows Explorer or the command line, copy the code files (with extensions .cpp, .h, and .xaml) from your Windows 8.1 project into the same folder as the project file (.vcxproj) for the project you created in step 1. Kopieren Sie nicht die Datei "Package.appxmanifest", und wenn Sie eigenen Code für Windows 8.1 Desktop- und -Phone haben, wählen Sie zunächst eines als Portierungsziel aus (Sie müssen später zur Angleichung an die andere Anpassungen vornehmen).Do not copy the Package.appxmanifest file, and if you have separate code for Windows 8.1 desktop and phone, choose one of them to port first (you'll have to do some work later to adapt to the other). Achten Sie darauf, dass Sie ebenfalls alle Inhalte aus den Unterordnern kopieren.Be sure to copy and subfolders and their contents. Wenn Sie aufgefordert werden, wählen Sie aus, dass Dateien mit doppelten Namen ersetzt werden.If prompted, choose to replace any files with duplicate names.

  6. Öffnen Sie die Projektmappe erneut, und klicken Sie im Kontextmenü für den Projektknoten auf Hinzufügen > Vorhandenes Element hinzufügen.Reopen the solution, and choose Add > Existing Item from the shortcut menu for the project node. Wählen Sie alle kopierten Dateien, außer denen, die bereits Teil des Projekts sind.Select all the files you copied, except any that are already part of the project.

    Überprüfen Sie die Unterordner, und stellen Sie sicher, dass die darin enthaltenen Dateien ebenfalls hinzufügt werden.Check any subfolders and make sure to add the files in them as well.

  7. Wenn Sie nicht den gleichen Projektnamen wie bei dem alten Projekt verwenden, öffnen Sie die Datei „Package.appxmanifest“, und aktualisieren Sie den Einstiegspunkt entsprechend des Namespacenamens für die App-Klasse.If you are not using the same project name as your old project, open the Package.appxmanifest file and update the Entry Point to reflect the namespace name for the App class.

    Das Feld Einstiegspunkt in der Datei „Package.appxmanifest“ enthält einen bereichsbezogenen Namen für die App-Klasse, die den Namespace enthält, der die App-Klasse enthält.The Entry Point field in the Package.appxmanifest file contains a scoped name for the App class, which includes the namespace that contains the App class. Wenn Sie ein universelles Windows-Projekt erstellen, wird für den Namespace der Name des Projekts festgelegt.When you create a Universal Windows project, the namespace is set to the name of the project. Wenn Unterschiede zu den von Ihnen aus dem alten Projekt kopierten Dateien bestehen, müssen Sie eines der beiden Projekte aktualisieren, damit sie übereinstimmen.If this is different from what's in the files you copied in from your old project, you must update one or the other to make them match.

  8. Erstellen Sie das Projekt, und lösen Sie alle Buildfehler durch wichtige Änderungen zwischen den verschiedenen Versionen des Windows SDK.Build the project, and address any build errors due to breaking changes between the different versions of the Windows SDK.

  9. Führen Sie das Projekt auf dem lokalen Desktop aus.Run the project on the Local Desktop. Stellen Sie sicher, dass keine Bereitstellungsfehler vorliegen, das Layout der App angemessen ist und es korrekt auf dem Desktop funktioniert.Verify that there are no deployment errors, and that the layout of the app looks reasonable and that it functions correctly on the desktop.

  10. Wenn Sie unterschiedliche Codedateien für XAML für ein anderes Gerät hatten, wie z. B. Windows Phone 8.1, überprüfen Sie den Code, und ermitteln Sie, wo er von dem für das Standardgerät abweicht.If you had separate code files and .xaml for another device, such as Windows Phone 8.1, examine this code and identify where it differs from the standard device. Ist der Unterschied nur im Layout, können Sie die XAML-Datei mit einem Manager für den visuellen Zustand bearbeiten, damit sie an die Bildschirmgröße der Anzeige angepasst werden kann.If the difference is only in the layout, you might be able to use a Visual State Manager in the xaml to customize the display depending on the size of the screen. Um weitere Unterschiede anzuzeigen, können Sie die Bedingungsabschnitte in Ihrem Code mithilfe der folgenden #if-Anweisungen verwenden.For other differences, you can use conditions sections in your code using the following #if statements.

    #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PC_APP)
    #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP)
    #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
    #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
    

    Diese Anweisungen gelten jeweils für UWP-Apps, Windows Phone Store-Apps, beide oder keines von beiden (nur klassische Win32-Desktop-Apps).These statements respectively apply to UWP apps, Windows Phone Store apps, both, or neither (classic Win32 desktop only). Diese Makros sind nur in Windows SDK 8.1 und höher verfügbar. Wenn Code mit früheren Versionen des Windows SDK oder für andere Plattformen als Windows kompiliert werden muss, sollten Sie daher auch den Fall berücksichtigen, dass sie nicht definiert sind.These macros are only available in Windows SDK 8.1 and later, so if your code needs to compile with earlier versions of the Windows SDK or for other platforms besides Windows, then you should also consider the case that none of them are defined.

  11. Führen Sie die App in einem Emulator oder auf einem physischen Gerät, dessen Gerätetyp von Ihrer App unterstützt wird.Run and debug the app on an emulator or physical device, for each type of device that your app supports. Um einen Emulator auszuführen, müssen Sie Visual Studio auf einem physischen Computer ausführen, nicht auf einem virtuellen Computer.To run an emulator, you need to run Visual Studio on a physical computer, not a virtual machine.

Portieren einer Windows 8.1-Runtime-Komponente auf UWPPorting a Windows 8.1 Runtime Component to the UWP

Wenn Sie eine DLL oder eine Windows-Runtime-Komponente besitzen, die bereits mit Windows 8.1 Store-Apps funktioniert, können Sie dieses Verfahren verwenden, um die Komponente oder DLL abzurufen, die mit UWP und Windows 10 funktioniert.If you have a DLL or a Windows Runtime Component that already works with Windows 8.1 Store apps, you can use this procedure to get the component or DLL working with the UWP and Windows 10. Das grundlegende Verfahren besteht darin, ein neues Projekt zu erstellen und Ihren Code hinein zu kopieren.The basic procedure is to create a new project and copy your code into it.

So portieren Sie eine Windows 8.1-Runtime-Komponente zur UWPTo port a Windows 8.1 Runtime Component to the UWP

  1. Suchen Sie im Dialogfeld Neues Projekt in Visual Studio 2017 den Knoten Windows Universal.In the New Project dialog in Visual Studio 2017, locate the Windows Universal node. Wenn dieser Knoten nicht angezeigt wird, installieren Sie zunächst das Windows 10 SDK.If you don't see this node, install the Windows 10 SDK first. Wählen Sie die Vorlage Komponente für Windows-Runtime , benennen Sie Ihre Komponente, und wählen Sie die Schaltfläche OK aus.Choose the Windows Runtime Component template, give a name for your component, and choose the OK button. Der Komponentenname wird als der Namespacename verwendet. Sie möchten daher möglicherweise denselben Namen wie beim Namespace Ihres alten Projekts verwenden.The component name will be used as the namespace name, so you might want to use the same name as your old projects' namespace. Dafür müssen Sie das Projekt in einem Ordner erstellen, der sich vom alten unterscheidet.This requires that you create the project in a different folder from the old one. Wenn Sie einen anderen Namen auswählen, können Sie den Namespace in den generierten Codedateien aktualisieren.If you choose a different name, you can update the namespace name in the generated code files.

  2. Schließen Sie das Projekt.Close the project.

  3. Kopieren Sie sämtliche Codedateien (.cpp, .h, .xaml usw.) aus Ihrer Windows 8.1-Komponente in Ihr neu erstelltes Projekt.Copy all the code files (.cpp, .h, .xaml, etc.) from your Windows 8.1 component into your newly created project. Kopieren Sie nicht die Datei „Package.appxmanifest“.Do not copy the Package.appxmanifest file.

  4. Beheben Sie alle Fehler, die auf Umbrechungsänderungen zwischen unterschiedlichen Versionen des Windows SDK zurückgehen.Build, and resolve any errors due to breaking changes between different versions of the Windows SDK.

ProblembehandlungTroubleshooting

Im Rahmen des Portierens von Code für die UWP können verschiedene Fehler auftreten.You might encounter various errors during the process of porting code to the UWP. Hier sind einige der möglichen Probleme, die auftreten können.Here are some of the possible problems you might encounter.

Probleme bei der ProjektkonfigurationProject Configuration Issues

Sie erhalten möglicherweise diese Fehlermeldung:You might receive the error:

could not find assembly 'platform.winmd': please specify the assembly search path using /AI or by setting the LIBPATH environment variable

In diesem Fall wird das Projekt nicht als universelles Windows-Projekt erstellt.If this happens, the project is not building as a Windows Universal project. Überprüfen Sie die Projektdatei, und stellen Sie sicher, dass sie über die richtigen XML-Elemente verfügt, die ein Projekt als universelles Windows-Projekt bezeichnen.Check the project file and make sure it has the correct XML elements that identify a project as a Windows Universal Project. Die folgenden Elemente sollten vorhanden sein (die Versionsnummer der Zielplattform weicht möglicherweise ab):The following elements should be present (the version number of the target platform might be different):

<AppContainerApplication>true</AppContainerApplication>
<ApplicationType>Windows Store</ApplicationType>
<WindowsTargetPlatformVersion>10.0.10156.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformMinVersion>10.0.10156.0</WindowsTargetPlatformMinVersion>
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>

Wenn Sie ein neues UWP-Projekt mithilfe von Visual Studio erstellt haben, sollte dieser Fehler nicht angezeigt werden.If you created a new UWP project using Visual Studio, you should not see this error.

Weitere InformationenSee also

Visual C++: PortierungsanleitungVisual C++ Porting Guide
Entwickeln von Apps für die universelle Windows-Plattform (UWP)Develop apps for the Universal Windows Platform (UWP)