Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I det här avsnittet hittar du information om hur du porterar befintlig C++-kod till Windows-appplattformen Universal Windows Platform. Vad som menas med termen universell är att koden kan köras på någon av de enheter som kör Windows 10 eller senare. Du skapar ett enda projekt och ett enda XAML-basanvändargränssnitt som fungerar bra på alla enheter som kör Windows 10 eller senare. Du kan använda dynamiska layoutfunktioner i XAML så att appens användargränssnitt kan anpassas till olika visningsstorlekar.
Dokumentationen om Windows Dev Center innehåller en guide för att portera Windows 8.1-appar till den universella Windows-plattformen. Se Flytta från Windows Runtime 8 till UWP. Även om guiden främst fokuserar på C#-kod gäller de flesta riktlinjerna för C++. Följande procedurer innehåller mer detaljerad information. Se även Flytta från ett skrivbordsprogram till UWP.
Det här avsnittet innehåller följande procedurer för att portera kod till UWP.
Om du har ett klassiskt skrivbords-Win32 DLL och du vill anropa det från ett UWP-program kan du också göra det. Med hjälp av sådana procedurer kan du skapa ett UWP-användargränssnittslager för ett befintligt klassiskt C++-program för Windows-skrivbordet eller din plattformsoberoende C++-kod. Se Så här använder du befintlig C++-kod i en universell Windows-plattformsapp.
Portera en Windows 8.1 Store-app till UWP
Om du har en Windows 8.1 Store-app kan du använda den här proceduren för att få den att fungera på UWP och alla enheter som kör Windows 10 eller senare. Det är en bra idé att först skapa projektet med Visual Studio 2019 som ett Windows 8.1-projekt för att först eliminera eventuella problem som uppstår vid ändringar i kompilatorn och biblioteken. När du har gjort det finns det två sätt att konvertera detta till ett Windows UWP-projekt. Det enklaste sättet (som beskrivs i följande procedur) är att skapa ett Universellt Windows-projekt och kopiera din befintliga kod till det. Om du använder ett universellt projekt för Windows 8.1 Desktop och Windows 8.1 Phone börjar projektet med två olika layouter i XAML men slutar med en enda dynamisk layout som justeras till visningsstorleken.
Så här porterar du en Windows 8.1 Store-app till UWP
Om du inte redan har gjort det öppnar du windows 8.1-appprojektet i Visual Studio 2017 och följer anvisningarna för att uppgradera projektfilen.
Du måste ha installerat Windows 8.1-verktygen i Visual Studio-installationen . Om du inte har installerat dessa verktyg startar du Visual Studio-installationen från fönstret Program och funktioner , väljer Visual Studio 2017 och väljer Ändra i installationsfönstret. Leta upp Windows 8.1-verktyg, kontrollera att det är markerat och välj OK.
Öppna fönstret Projektegenskaper och under C++>Allmänt anger du plattformsverktyguppsättningen till v141, verktygsuppsättningen för Visual Studio 2017.
Skapa projektet som ett Windows 8.1-projekt och åtgärda eventuella byggfel. Eventuella fel i det här skedet beror förmodligen på ändringar som bryter kompatibilitet i byggverktygen och biblioteken. En detaljerad förklaring av de ändringar som kan påverka koden finns i Visual C++ ändringshistorik 2003–2015 .
När ditt projekt byggs utan fel är du redo att portera till Universal Windows-plattformen.
Skapa ett nytt Universal Windows App-projekt med hjälp av mallen Tom. Du kanske vill ge det samma namn som ditt befintliga projekt, men för att göra det måste projekten finnas i olika kataloger.
Stäng lösningen och använd sedan Utforskaren eller kommandoraden och kopiera kodfilerna (med tillägg .cpp, .h och .xaml) från ditt Windows 8.1-projekt till samma mapp som projektfilen (.vcxproj) för projektet du skapade i steg 1. Kopiera inte filen Package.appxmanifest, och om du har separat kod för Windows 8.1 desktop och telefon väljer du en av dem till port först (du måste göra lite arbete senare för att anpassa dig till den andra). Se till att kopiera undermappar och deras innehåll. Om du uppmanas att göra det väljer du att ersätta alla filer med dubblettnamn.
Öppna lösningen igen och välj Lägg till>befintligt objekt på snabbmenyn för projektnoden. Markera alla filer som du kopierade, förutom alla filer som redan ingår i projektet.
Kontrollera eventuella undermappar och se till att lägga till filerna i dem också.
Om du inte använder samma projektnamn som det gamla projektet öppnar du filen Package.appxmanifest och uppdaterar startpunkten för att återspegla namnområdesnamnet för
Appklassen.Fältet Startpunkt i filen Package.appxmanifest innehåller ett omfångsnamn för
Appklassen, som innehåller det namnområde som innehållerAppklassen. När du skapar ett Universellt Windows-projekt anges namnområdet till namnet på projektet. Om detta skiljer sig från vad som finns i filerna som du kopierade från ditt gamla projekt måste du uppdatera det ena eller det andra för att få dem att matcha.Bygg projektet och åtgärda eventuella byggfel på grund av kompatibilitetsproblem mellan de olika versionerna av Windows SDK.
Kör projektet på det lokala skrivbordet. Kontrollera att det inte finns några distributionsfel och att appens layout ser rimlig ut och att den fungerar korrekt på skrivbordet.
Om du hade separata kodfiler och .xaml för en annan enhet, till exempel Windows Phone 8.1, undersöker du den här koden och identifierar var den skiljer sig från standardenheten. Om skillnaden bara finns i layouten kanske du kan använda en Visual State Manager i xaml för att anpassa skärmen beroende på skärmens storlek. För andra skillnader kan du använda villkorsavsnitt i koden med hjälp av följande #if-instruktioner.
#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)Dessa instruktioner gäller för UWP-appar, Windows Phone Store-appar, båda eller ingetdera (endast klassiskt Win32-skrivbord). Dessa makron är endast tillgängliga i Windows SDK 8.1 och senare, så om koden behöver kompileras med tidigare versioner av Windows SDK eller för andra plattformar förutom Windows bör du också överväga att ingen av dem har definierats.
Kör och felsök appen på en emulator eller fysisk enhet för varje typ av enhet som appen stöder. Om du vill köra en emulator måste du köra Visual Studio på en fysisk dator, inte en virtuell dator.
Portera en Windows 8.1-körningskomponent till UWP
Om du har en DLL eller en Windows Runtime-komponent som redan fungerar med Windows 8.1 Store-appar kan du använda den här proceduren för att få komponenten eller DLL-filen att fungera med UWP i Windows. Den grundläggande proceduren är att skapa ett nytt projekt och kopiera koden till det.
Så här porterar du en Windows 8.1-körningskomponent till UWP
Leta upp noden Windows Universal i dialogrutan Nytt projekt i Visual Studio 2017. Om du inte ser den här noden installerar du Windows SDK först. Välj windows runtime-komponentmallen , ge ett namn på komponenten och välj knappen OK . Komponentnamnet används som namnområdesnamn, så du kanske vill använda samma namn som ditt gamla projekts namnområde. Detta kräver att du skapar projektet i en annan mapp än den gamla. Om du väljer ett annat namn kan du uppdatera namnområdesnamnet i de genererade kodfilerna.
Stäng projektet.
Kopiera alla kodfiler (.cpp, .h, .xaml osv.) från din Windows 8.1-komponent till ditt nyligen skapade projekt. Kopiera inte filen Package.appxmanifest.
Skapa och lös eventuella fel på grund av icke-bakåtkompatibla ändringar mellan olika versioner av Windows SDK.
Felsökning
Du kan stöta på olika fel under processen med att portera kod till UWP. Här är några av de möjliga problem som du kan stöta på.
Problem med projektkonfiguration
Du kan få felet:
could not find assembly 'platform.winmd': please specify the assembly search path using /AI or by setting the LIBPATH environment variable
Om detta händer skapas inte projektet som ett Universellt Windows-projekt. Kontrollera projektfilen och kontrollera att den har rätt XML-element som identifierar ett projekt som ett Universellt Windows-projekt. Följande element bör finnas (versionsnumret för målplattformen kan vara annorlunda):
<AppContainerApplication>true</AppContainerApplication>
<ApplicationType>Windows Store</ApplicationType>
<WindowsTargetPlatformVersion>10.0.10156.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformMinVersion>10.0.10156.0</WindowsTargetPlatformMinVersion>
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>
Om du har skapat ett nytt UWP-projekt med Visual Studio bör du inte se det här felet.
Se även
Visual C++ Porting Guide
Utveckla appar för UWP(Universal Windows Platform)