Guida al porting: MFC ScribblePorting Guide: MFC Scribble

Questo è il primo di una serie di argomenti che illustrano la procedura di aggiornamento a Visual Studio 2017 di progetti Visual C++ creati in versioni precedenti di Visual Studio.This topic is the first of several topics that introduce you to the upgrade procedure for Visual C++ projects that were created in older versions of Visual Studio to Visual Studio 2017. In questi argomenti la procedura di aggiornamento viene presentata tramite esempi, partendo da un progetto molto semplice fino ad arrivare a quelli leggermente più complessi.These topics introduce the upgrade process by example, starting with a very simple project and moving to slightly more complex ones. In particolare in questo argomento verrà illustrata la procedura di aggiornamento per un progetto specifico, MFC Scribble,In this topic, we work through the upgrade process for a specific project, MFC Scribble. che può fungere da introduzione di base per l'aggiornamento di progetti C++.It is suitable as a basic introduction to the upgrade process for C++ projects.

Ogni versione di Visual Studio introduce possibili incompatibilità che possono complicare il passaggio del codice da una versione meno recente a una più recente di Visual Studio.Each version of Visual Studio introduces possible incompatibilities that can complicate moving code from an older version of Visual Studio to a newer one. In alcuni casi le modifiche devono essere apportate nel codice, di conseguenza è necessario ricompilare e aggiornare il codice, mentre in altri devono essere apportate ai file di progetto.Sometimes the required changes are in your code, so you must recompile and update your code, and sometimes the required changes are to the project files. Quando si apre un progetto creato con una versione precedente di Visual Studio, viene chiesto automaticamente se aggiornare un progetto o una soluzione alla versione più recente.When you open a project that was created with a previous version of Visual Studio, Visual Studio automatically asks you whether to update a project or solution to the latest version. Questi strumenti in genere consentono però di aggiornare solo i file di progetto e non di modificare il codice sorgente.These tools usually upgrade only the project files; they do not modify your source code.

MFC ScribbleMFC Scribble

MFC Scribble è un noto esempio incluso in numerose versioni diverse di Visual C++.MFC Scribble is a well-known sample that has been included in many different releases of Visual C++. Si tratta di una semplice applicazione di disegno che illustra alcune funzionalità di base di MFC.It's a simple drawing application that illustrates some of the basic features of MFC. Ne esistono varie versioni, sia in codice nativo che in codice gestito.There are various versions of it available, including both managed and native code versions. Per questo esempio è stata usata una versione precedente di Scribble in codice nativo di Visual Studio 2005, aperta in Visual Studio 2017.For this example, we found an old version of Scribble in native code from Visual Studio 2005 and opened it in Visual Studio 2017.

Prima di provare a eseguire l'aggiornamento, verificare che sia installato il carico di lavoro Desktop di Windows.Before attempting to upgrade, make sure that you have the Windows Desktop workload installed. Aprire il programma di installazione di Visual Studio (vs_installer.exe).Open the Visual Studio installer (vs_installer.exe). Un metodo per aprire il programma di installazione consiste nello scegliere File | Nuovo progetto e scorrere alla fine dell'elenco dei modelli installati, fino a vedere "Apri il programma di installazione di Visual Studio".One way to open the installer is to choose File | New Project and scroll to the bottom of the list of installed templates until you see "Open Visual Studio Installer". Dopo l'apertura del programma di installazione vengono visualizzati tutti i carichi di lavoro disponibili.After opening the installer you will see all the available workloads. Se la casella del carico di lavoro Desktop di Windows non è selezionata, selezionarla e fare clic sul pulsante Modifica nella parte inferiore della finestra.If the box for the Windows Desktop workload is not selected, then select it and click the Modify button at the bottom of the window.

Quindi eseguire il backup dell'intera soluzione e di tutto il contenuto.Next, back up the entire solution and all its contents.

In seguito sarà necessario scegliere il metodo di aggiornamento specifico.Finally, we needed to decide on the specific method of upgrade. Per soluzioni e progetti più complessi che non sono stati aggiornati da molto tempo, è opportuno eseguire l'aggiornamento a una sola versione di Visual Studio alla volta.For more complex solutions and projects that haven't been upgraded for a long time, you should consider upgrading one version of Visual Studio at a time. In tal modo è possibile individuare più facilmente la versione di Visual Studio con cui è stato introdotto un certo problema.That way, you can narrow down which version of Visual Studio introduced a problem. Per un progetto semplice vale la pena provare ad aprirlo nella versione più recente di Visual Studio e consentire alla procedura guidata di procedere alla conversione.For a simple project, it's worth trying to open it in the latest version of Visual Studio and allowing the wizard to convert the project. Se questo approccio non funziona, è quindi possibile provare ad effettuare l'aggiornamento una versione alla volta, purché siano disponibili le versioni appropriate di Visual Studio.If that doesn't work, you can try upgrading one version at a time, if you have access to the appropriate versions of Visual Studio.

Tenere presente che invece di aggiornare i progetti con la procedura guidata, è anche possibile eseguire devenv dalla riga di comando specificando l'opzione /Upgrade.Note that you can also run devenv at the command line, using the /Upgrade option, instead of using the wizard to upgrade your projects. Vedere /Upgrade (devenv.exe).See /Upgrade (devenv.exe). Questo approccio può risultare utile per automatizzare la procedura di aggiornamento per un numero elevato di progetti.That could be helpful in automating the upgrade process for a large number of projects.

Passaggio 1.Step 1. Conversione del file di progettoConverting the Project File

Quando si apre in Visual Studio 2017 un file di progetto creato in una versione precedente, viene chiesto se si vuole convertire il file di progetto alla versione più recente. In questo caso l'offerta è stata accettata.When you open an old project file in Visual Studio 2017, Visual Studio offers to convert the project file to the most recent version, which we accepted. viene visualizzata la finestra di dialogo seguente:The following dialog box appeared:

Revisione modifiche a progetti e soluzioniReview Project and Solution Changes

Si è verificato un errore e viene visualizzato un messaggio per informare che la destinazione Itanium non è disponibile e la conversione non verrà eseguita.An error occurred notifying us that the Itanium target is not available and won't be converted.

Platform 'Itanium' is missing from this project. All the configurations and their file configuration settings specific to this platform will be ignored. If you want this platform converted, please make sure you have the corresponding platform installed under '%vctargetpath%\platforms\Itanium'.Continue to convert this project without this platform?  

All'epoca in cui è stato creato il progetto Scribble precedente, Itanium era un'importante piattaforma di destinazione.At the time the previous Scribble project was created, Itanium was an important target platform. La piattaforma Windows non supporta più Itanium, di conseguenza è stato scelto di continuare senza il supporto della piattaforma Itanium.The Windows platform no longer supports Itanium, so we chose to continue without supporting the Itanium platform.

Visual Studio visualizza quindi un report di migrazione che elenca tutti i problemi riscontrati nel vecchio file di progetto.Visual Studio then displayed a migration report listing all of the issues with the old project file.

Report di aggiornamentoUpgrade Report

In questo caso, i problemi erano tutti avvisi e Visual Studio ha apportato le modifiche appropriate nel file di progetto.In this case, the issues were all warnings, and Visual Studio made the appropriate changes in the project file. La grande differenza per quanto riguarda il progetto è che lo strumento di compilazione è cambiato da vcbuild a msbuild.The big difference as far as the project is concerned is that the build tool changed from vcbuild to msbuild. Questa modifica è stata introdotta in Visual Studio 2010.This change was first introduced in Visual Studio 2010. Altre modifiche includono una riorganizzazione della sequenza di elementi nel file di progetto.Other changes include some rearrangement of the sequence of elements in the project file itself. Per questo progetto semplice nessuno dei problemi ha richiesto ulteriore attenzione.None of the issues required further attention for this simple project.

Passaggio 2.Step 2. Preparazione della compilazioneGetting it to build

Prima della compilazione è necessario controllare il set di strumenti della piattaforma per conoscere la versione del compilatore usata dal sistema del progetto.Before building, we check the platform toolset so we know what compiler version the project system is using. Nella finestra delle proprietà del progetto esaminare la proprietà Set di strumenti della piattaforma nella categoria Generale in Proprietà di configurazione.In the project properties dialog, under Configuration Properties, in the General category, look at the Platform Toolset property. Tale proprietà contiene la versione di Visual Studio e il numero di versione dello strumento della piattaforma, che in questo caso è v141 per la versione Visual Studio 2017 degli strumenti.It contains the version of Visual Studio and the platform tool version number, which in this case is v141 for the Visual Studio 2017 version of the tools. Quando si converte un progetto che in origine è stato compilato con Visual C++ 2010, 2012, 2013 o 2015, il set di strumenti non viene aggiornato automaticamente a Visual Studio 2017.When you convert a project that was originally compiled with Visual C++ 2010, 2012, 2013 or 2015, the toolset is not automatically updated to the Visual Studio 2017 toolset.

Per il passaggio a Unicode, aprire le proprietà del progetto e in Proprietà di configurazione scegliere la sezione Generale, quindi trovare la proprietà Set di caratteri.To make the switch to Unicode, open the project's properties, under Configuration Properties, choose the General section, and locate the Character Set property. Modificare l'impostazione corrente Utilizza set di caratteri multibyte in Usa set di caratteri Unicode.Change this from Use Multi-Byte Character Set to Use Unicode Character Set. Per effetto di questa modifica le macro _UNICODE e UNICODE sono ora definite mentre _MBCS non lo è, come è possibile verificare nella proprietà Riga di comando della categoria C/C++ nella finestra di dialogo delle proprietà.The effect of this change is that now the _UNICODE and UNICODE macros are defined and _MBCS is not, which you can verify in the properties dialog under the C/C++ category at the Command Line property.

/GS /analyze- /W4 /Zc:wchar_t /Zi /Gm- /Od /Fd".\Debug\vc141.pdb" /Zc:inline /fp:precise /D "_AFXDLL" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX /Zc:forScope /Gd /Oy- /MDd /Fa".\Debug\" /EHsc /nologo /Fo".\Debug\" /Fp".\Debug\Scribble.pch" /diagnostics:classic 

Anche se il progetto Scribble non è stato configurato per la compilazione con i caratteri Unicode, è già stato scritto con TCHAR anziché char, di conseguenza non c'è nulla da modificare.Although Scribble project wasn't set up to compile with Unicode characters, it was already written with TCHAR instead of char, so nothing actually needs to be changed. Il progetto viene infatti compilato correttamente con il set di caratteri Unicode.The project builds successfully with the Unicode character set.

Compilare la soluzione.Now build the solution. Nella finestra di output il compilatore informa che _WINNT32_WINNT non è definita:In the output window, the compiler tells us that _WINNT32_WINNT is not defined:

_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)  

Si tratta di un avviso, non di un errore, molto comune quando si aggiorna un progetto Visual C++.This is a warning, not an error, and is very common when upgrading a Visual C++ project. Questa è la macro che definisce la versione minima di Windows in cui verrà eseguita l'applicazione.This is the macro that defines what the lowest version of Windows that our application will run on. Se si ignora l'avviso, si accetta il valore predefinito, _WIN32_WINNT_MAXVER, che indica la versione corrente di Windows.If we ignore the warning, we accept the default value, _WIN32_WINNT_MAXVER, which means the current version of Windows. Per una tabella di valori possibili, vedere Uso delle intestazioni di Windows.For a table of possible values, see Using the Windows Headers. È ad esempio possibile impostarlo in modo che venga eseguito in qualsiasi versione a partire da Vista.For example, we can set it to run on any version from Vista onwards.

#define _WIN32_WINNT _WIN32_WINNT_VISTA  

Se il codice usa parti dell'API di Windows che non sono disponibili nella versione di Windows specificata con questa macro, il problema verrà segnalato come errore del compilatore.If the code uses parts of the Windows API that aren't available on the version of Windows that you specify with this macro, you should see that as a compiler error. Nel caso del codice di Scribble non ci sono errori.In the case of the Scribble code, there is no error.

Passaggio 3.Step 3. Test e debugTesting and debugging

Dal momento che non esistono gruppi di test, l'app è stata avviata e ne sono state verificate manualmente le funzionalità tramite l'interfaccia utente.There is no test suite, so we just started the app, tested its features manually through the UI. Non sono stati riscontrati problemi.No issues were observed.

Passaggio 4.Step 4. Migliorare il codiceImprove the code

A questo punto, dopo aver eseguito la migrazione a Visual Studio 2017, è possibile apportare alcune modifiche per sfruttare i vantaggi delle nuove funzionalità di C++.Now that you've migrated to Visual Studio 2017, you might want to make some changes to take advantage of new C++ features. La versione corrente del compilatore di Visual C++ è molto più conforme allo standard C++ delle versioni precedenti. Se quindi si intende apportare alcune modifiche al codice per renderlo più sicuro e garantirne una maggiore portabilità con altri compilatori e sistemi operativi, è opportuno valutare alcuni miglioramenti.The current version of Visual C++ compiler is much more conformant to the C++ standard then previous versions, so if you have a mind to make some code changes to make your code more secure, and more portable to other compilers and operating systems, you should consider some improvements.

Passaggi successiviNext steps

Scribble è un'applicazione desktop Windows piccola e semplice, che non è stato difficile convertire.Scribble was a small and simple Windows desktop application, and it wasn't hard to convert. Sono molte le app semplici e di piccole dimensioni facilmente convertibili alla nuova versione.Many small, simple apps convert just as easily to the new version. L'aggiornamento richiederà più tempo nel caso di applicazioni più complesse, contenenti molte più righe di codice, codice legacy meno recente che potrebbe non essere al passo con i moderni standard di progettazione, più progetti e librerie, istruzioni di compilazione personalizzate o compilazioni complesse automatizzate tramite script.For more complex applications, with many more lines of code, older legacy code that might not be up to modern engineering standards, multiple projects and libraries, custom build steps, or for complex scripted automated builds, it will take more time to upgrade. Continuare con l'esempio successivo, l'applicazione ATL/COM denominata COM Spy.Continue with the next example, an ATL/COM application called COM Spy.

Vedere ancheSee Also

Porting e aggiornamento: esempi e case study Porting and Upgrading: Examples and Case Studies
Esempio successivo: COM SpyNext Example: COM Spy