Trasferimento alla piattaforma UWP (Universal Windows Platform) (C++)Porting to the Universal Windows Platform (C++)

In questo argomento è possibile trovare informazioni su come eseguire il porting di codice C++ esistente alla piattaforma di app Windows 10, la piattaforma UWP (Universal Windows Platform).In this topic, you can find information on how to port existing C++ code to the Windows 10 app platform, the Universal Windows Platform. Il termine universale indica che il codice può essere eseguito su uno qualsiasi dei dispositivi su cui è in esecuzione Windows 10, tra cui desktop, tablet e dispositivi futuri che eseguono Windows 10.What is meant by the term universal is that your code can run on any of the devices that run Windows 10, including desktop, phone, tablets, and future devices that run Windows 10. Si crea un unico progetto e un'unica interfaccia utente basata su XAML che funziona con qualsiasi dispositivo che esegue Windows 10.You create a single project and a single XAML-base user interface that works well on any device that runs Windows 10. È possibile usare le funzionalità di layout dinamico in XAML per consentire l'interfaccia utente dell'applicazione di adattarsi alle dimensioni del display diverse.You can use dynamic layout features in XAML to allow the app's UI to adapt to different display sizes.

La documentazione di Windows Developer Center contiene una guida al trasferimento di app di Windows 8.1 alla piattaforma UWP (Universal Windows Platform).The Windows Dev Center documentation contains a guide for porting Windows 8.1 apps to the Universal Windows Platform. Vedere Passare da Windows Runtime 8 a UWP.See Move from Windows Runtime 8 to UWP. Nonostante la Guida illustri principalmente il codice C#, la maggior parte delle informazioni contenute nella Guida sono applicabili a C++.Although the guide focused mostly on C# code, most of the guidance is applicable to C++. Le procedure seguenti contengono informazioni più dettagliate.The following procedures contain more detailed information.

Questo argomento contiene le procedure seguenti per convertire il codice per la piattaforma UWP.This topic contains the following procedures for porting code to the UWP.

  1. Porting di un'app di Windows Store 8.1 alla piattaforma UWPPorting a Windows 8.1 Store App to the UWP

  2. Porting di un componente Runtime di Windows 8.1 per il UWPPorting a Windows 8.1 Runtime Component to the UWP

    Se si ha a disposizione una DLL Win32 per desktop classico e la si vuole chiamare da un'applicazione UWP, è anche possibile eseguire queste operazioni.If you have a classic desktop Win32 DLL and you want to call it from a UWP application, you can do that as well. Usando queste procedure, è possibile creare un livello dell'interfaccia utente UWP per un'applicazione C++ per desktop Windows classico esistente oppure un codice C++ multipiattaforma standard.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. Vedere Procedura: usare codice C++ esistente in un'app della piattaforma UWP (Universal Windows Platform).See How to: Use Existing C++ Code in a Universal Windows Platform App.

Porting di un'app di Windows Store 8.1 alla piattaforma UWP Porting a Windows 8.1 Store App to the UWP

Se è disponibile un'app di Windows 8.1 Store, è possibile usare questa procedura per ottenere lo stesso risultato in UWP e nei dispositivi che eseguono Windows 10.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. È consigliabile iniziare compilando il progetto con Visual Studio 2017 come progetto di Windows 8.1, per eliminare eventuali problemi originati dalle modifiche apportate al compilatore e alle librerie.It's a good idea to first build the project with Visual Studio 2017 as a Windows 8.1 project, to first eliminate any issues that arise from changes in the compiler and libraries. Dopo aver eseguito l'operazione, sono disponibili due modi per convertirlo in un progetto UWP Windows 10.Once you've done that, there are two ways to convert this to a Windows 10 UWP project. Il modo più semplice (come spiegato nella procedura seguente) consiste nel creare un progetto Windows universale e copiarvi il codice esistente.The easiest way (as explained in the following procedure) is to create a Universal Windows project, and copy your existing code into it. Se si usa un progetto universale per desktop per Windows 8.1 e Windows 8.1 Phone, il progetto verrà avviato con due layout diversi in XAML, ma terminerà con un singolo layout dinamico che consente di regolare le dimensioni di visualizzazione.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.

Per eseguire il porting di un'app di Windows Store 8.1 alla piattaforma UWPTo port a Windows 8.1 Store App to the UWP

  1. Se necessario, aprire il progetto di app Windows 8.1 in Visual Studio 2017 e seguire le istruzioni per aggiornare il file di progetto.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.

    È necessario aver installato gli strumenti di Windows 8.1 nel programma di installazione di Visual Studio.You need to have installed the Windows 8.1 Tools in Visual Studio setup. Se questi strumenti installati non sono disponibili, avviare l'installazione di Visual Studio dalla finestra Programmi e funzionalità, scegliere Visual Studio 2017 e nella finestra di dialogo del programma di installazione scegliere Modifica.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. Individuare gli strumenti di Windows 8.1, assicurarsi che l'opzione è selezionata e scegliere OK.Locate Windows 8.1 Tools, make sure it is selected, and choose OK.

  2. Aprire la finestra Proprietà progetto e in C++, Generale impostare il set di strumenti della piattaforma su v141, gli strumenti di compilazione per Visual Studio 2017.Open the Project Properties window, and under C++, General, set the Platform Toolset to v141, the build tools for Visual Studio 2017.

  3. Compilare il progetto come progetto di Windows 8.1 e risolvere gli eventuali errori di compilazione.Build the project as a Windows 8.1 project, and address any build errors. Eventuali errori in questa fase sono probabilmente a causa di modifiche importanti nelle librerie e strumenti di compilazione.Any errors at this stage are probably due to breaking changes in the build tools and libraries. Vedere Cronologia delle modifiche di Visual C++ dal 2003 al 2015 per la spiegazione dettagliata delle modifiche che potrebbero influire sul codice.See Visual C++ change history 2003 - 2015 for a detailed explanation of the changes that might affect your code.

    Una volta che il progetto verrà compilato correttamente, si è pronti a porta universale Windows (Windows 10).Once your project builds cleanly, you are ready to port to Universal Windows (Windows 10).

  4. Creare un nuovo progetto di App Windows universale usando il modello vuoto.Create a new Universal Windows App project using the Blank template. È possibile assegnare lo stesso nome del progetto esistente, anche se a tale scopo, i progetti deve essere in directory diverse.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. Chiudere la soluzione e quindi usando Esplora risorse o la riga di comando, è possibile copiare i file di codice (con estensioni cpp, h e con estensione XAML) dal progetto Windows 8.1 nella stessa cartella del file di progetto (vcxproj) per il progetto creato nel passaggio 1.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. Non copiare il file package appxmanifest e se si dispone di codice separato per desktop di Windows 8.1 e telefono, scegliere uno di essi alla porta prima (sarà necessario eseguire alcune operazioni in un secondo momento per adattarsi a altro).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). Assicurarsi di copia e le sottocartelle e il relativo contenuto.Be sure to copy and subfolders and their contents. Se richiesto, scegliere di sostituire tutti i file con nomi duplicati.If prompted, choose to replace any files with duplicate names.

  6. Riaprire la soluzione e scegliere Aggiungi, Elemento esistente dal menu di scelta rapida per il nodo progetto.Reopen the solution, and choose Add, Existing Item from the shortcut menu for the project node. Selezionare tutti i file copiati, ad eccezione di quelle che fanno già parte del progetto.Select all the files you copied, except any that are already part of the project.

    Controllare eventuali sottocartelle e assicurarsi di aggiungere anche i file in esse.Check any subfolders and make sure to add the files in them as well.

  7. Se non si usa lo stesso nome del progetto precedente, aprire il file package appxmanifest e aggiornare il punto di ingresso per riflettere il nome dello spazio dei nomi per la classe App.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.

    Il campo Punto di ingresso nel file Package.appxmanifest contiene un nome con ambito per la classe App, che include lo spazio dei nomi contenente la classe App.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. Quando si crea un progetto Windows universale, lo spazio dei nomi viene impostato sul nome del progetto.When you create a Universal Windows project, the namespace is set to the name of the project. Se questa è diversa da quella i file copiati dal progetto precedente, è necessario aggiornare uno o l'altro in modo adeguato.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. Compilare il progetto e risolvere gli eventuali errori di compilazione a causa di modifiche importanti tra le diverse versioni di Windows SDK.Build the project, and address any build errors due to breaking changes between the different versions of the Windows SDK.

  9. Eseguire il progetto sul Desktop locale.Run the project on the Local Desktop. Verificare che non siano presenti errori di distribuzione e che il layout dell'applicazione è ragionevole e che funzioni correttamente sul desktop.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. Se si dispone di file di codice separati e XAML per un altro dispositivo, ad esempio Windows Phone 8.1, esaminare il codice e identificare dove è diversa dal dispositivo standard.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. Se la differenza è solo nel layout, è possibile usare un gestore dello stato di visualizzazione nel codice xaml per personalizzare la visualizzazione a seconda delle dimensioni dello schermo.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. Per altre differenze è possibile usare le sezioni di condizioni nel codice usando le istruzioni #if seguenti.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)  
    

    Queste istruzioni rispettivamente si applicano alle app di Windows Store, Windows Phone Store, a entrambe o a nessuna delle due (solo desktop Win32 classico).These statements respectively apply to Windows Store apps, Windows Phone Store apps, both, or neither (classic Win32 desktop only). Queste macro sono disponibili solo in Windows SDK 8.1 e versioni successive, quindi se il codice deve essere compilato con le versioni precedenti di Windows SDK o per altre piattaforme diverse da Windows, è necessario prendere in considerazione il fatto che nessuna di queste venga definita.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. Esecuzione e il debug dell'app su un emulatore o un dispositivo fisico, per ogni tipo di dispositivo che supporta l'applicazione.Run and debug the app on an emulator or physical device, for each type of device that your app supports. Per eseguire un emulatore, è necessario eseguire Visual Studio in un computer fisico, non una macchina virtuale.To run an emulator, you need to run Visual Studio on a physical computer, not a virtual machine.

Porting di un componente Runtime di Windows 8.1 per il UWP Porting a Windows 8.1 Runtime Component to the UWP

Se si dispone di una DLL o di un componente Windows Runtime già compatibile con app di Windows Store 8.1, è possibile usare questa procedura per ottenere il componente o una DLL compatibili con la piattaforma UWP e con Windows 10.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. La procedura di base consiste nel creare un nuovo progetto e copiarvi il codice.The basic procedure is to create a new project and copy your code into it.

Per trasferire un componente Windows 8.1 Runtime nella piattaforma UWPTo port a Windows 8.1 Runtime Component to the UWP

  1. Nella finestra di dialogo Nuovo progetto in Visual Studio 2017, trovare il nodo Universale di Windows.In the New Project dialog in Visual Studio 2017, locate the Windows Universal node. Se questo nodo non viene visualizzato, installare prima Strumenti per Windows 10 .If you don't see this node, install the Tools for Windows 10 first. Scegliere il modello Componente Windows Runtime , assegnare un nome al componente e scegliere il pulsante OK .Choose the Windows Runtime Component template, give a name for your component, and choose the OK button. Il nome del componente verrà usato come nome dello spazio dei nomi, quindi si potrebbe voler usare lo stesso nome del precedente spazio dei nomi del progetto.The component name will be used as the namespace name, so you might want to use the same name as your old projects' namespace. Di conseguenza, si deve creare il progetto in una cartella diversa da quella precedente.This requires that you create the project in a different folder from the old one. Se si sceglie un nome diverso, è possibile aggiornare lo spazio dei nomi nei file di codice generato.If you choose a different name, you can update the namespace name in the generated code files.

  2. Chiudere il progetto.Close the project.

  3. Copiare tutti i file di codice (estensioni cpp, h, xaml e così via.) dal componente Windows 8.1 nel progetto appena creato.Copy all the code files (.cpp, .h, .xaml, etc.) from your Windows 8.1 component into your newly created project. Non copiare il file Package.appxmanifest.Do not copy the Package.appxmanifest file.

  4. Compilare il progetto e risolvere gli eventuali errori di compilazione a causa di modifiche importanti tra le diverse versioni di Windows SDK.Build, and resolve any errors due to breaking changes between different versions of the Windows SDK.

Risoluzione dei problemiTroubleshooting

Possono verificarsi diversi errori durante il processo di porting di codice per la piattaforma Windows universale.You might encounter various errors during the process of porting code to the Universal Windows Platform. Di seguito sono riportati alcuni possibili problemi riscontrati.Here are some of the possible problems you might encounter.

Configurazione progetto non valida.Project Configuration Issues

È possibile ricevere l'errore: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 questo caso, il progetto non è la creazione di un progetto Windows universale.If this happens, the project is not building as a Windows Universal project. Controllare il file di progetto e assicurarsi che gli elementi XML corretti che identificano un progetto come Windows universale.Check the project file and make sure it has the correct XML elements that identify a project as a Windows Universal Project. Gli elementi seguenti devono essere presenti (il numero di versione della piattaforma di destinazione potrebbe essere diversa):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>  

Se si crea un nuovo progetto della piattaforma UWP (Universal Windows Platform) usando Visual Studio, questo errore non verrà visualizzato.If you created a new Universal Windows Platform project using Visual Studio, you should not see this error.

Vedere ancheSee Also

Guida al porting di Visual C++ Visual C++ Porting Guide
Sviluppare app per la piattaforma UWP (Universal Windows Platform)Develop apps for the Universal Windows Platform (UWP)