Megosztás:


Áthelyezési útmutató: MFC Scribble

Ez a témakör az első olyan témakörök közül, amelyek bemutatják a Visual Studio régebbi verzióiban létrehozott Visual Studio C++ projektek frissítési eljárását a Visual Studio 2017-re. Ezek a témakörök példaként mutatják be a frissítési folyamatot, kezdve egy nagyon egyszerű projekttel, és kissé összetettebbre váltanak. Ebben a témakörben egy adott projekt, az MFC Scribble frissítési folyamatán dolgozunk. A C++ projektek frissítési folyamatának alapszintű bemutatása.

A Visual Studio minden verziója olyan lehetséges inkompatibilitásokat vezet be, amelyek megnehezíthetik a kód áthelyezését a Visual Studio régebbi verziójából egy újabbra. Előfordulhat, hogy a szükséges módosítások a kódban vannak, ezért újra kell lefordítania és frissítenie kell a kódot, és néha a szükséges módosítások a projektfájlokban vannak. A Visual Studio egy korábbi verziójával létrehozott projekt megnyitásakor a Visual Studio automatikusan megkérdezi, hogy frissíti-e a projektet vagy a megoldást a legújabb verzióra. Ezek az eszközök általában csak a projektfájlokat frissítik; nem módosítják a forráskódot.

MFC Scribble

Az MFC Scribble egy jól ismert minta, amely a Visual C++ számos különböző kiadásában megtalálható. Ez egy egyszerű rajzalkalmazás, amely az MFC néhány alapvető funkcióját szemlélteti. Ennek különböző verziói érhetők el, beleértve a felügyelt és a natív kódverziókat is. Ebben a példában a Scribble egy régi verzióját találtuk meg natív kódként az 2005-ös Visual Studioból, és megnyitottuk a 2017-es Visual Studioban.

A frissítés megkísérlése előtt győződjön meg arról, hogy telepítve van a Windows Desktop számítási feladat. Nyissa meg a Visual Studio telepítőt (vs_installer.exe). A telepítő megnyitásának egyik módja, ha a Fájl>új projekt lehetőséget választja, és görgessen a telepített sablonok listájának aljára, amíg meg nem jelenik a Visual Studio Installer megnyitása. A telepítő megnyitása után megjelenik az összes elérhető számítási feladat. Ha nincs bejelölve a Windows Asztali számítási feladat mezője, jelölje ki, majd kattintson az ablak alján található Módosítás gombra.

Ezután biztonsági másolatot készít a teljes megoldásról és annak tartalmáról.

Végül nyissa meg a megoldást a Visual Studio legújabb verziójában, és engedélyezze a varázslónak a projekt konvertálását.

Ne feledje, hogy a devenv parancsot a parancssorban futtathatja a /Upgrade opció használatával, ahelyett, hogy a varázslót használná a projektek frissítésére. Lásd: /Upgrade (devenv.exe). Ez nagy számú projekt frissítési folyamatának automatizálásában lehet hasznos.

1. lépés. A projektfájl konvertálása

Amikor megnyit egy régi projektfájlt a Visual Studióban, a Visual Studio felajánlja, hogy a projektfájlt a legújabb verzióra konvertálja, amelyet elfogadtunk. Megjelent a következő párbeszédpanel:

Tekintse át a Projekt- és megoldásmódosítások párbeszédpanelt.

Hiba történt, amely arról értesített minket, hogy az Itanium-cél nem érhető el, és nem lesz konvertálva.

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?

Az előző Scribble-projekt létrehozásakor az Itanium fontos célplatform volt. A Windows platform már nem támogatja az Itaniumot, ezért úgy döntöttünk, hogy az Itanium platform támogatása nélkül folytatjuk.

Ezután a Visual Studio egy migrálási jelentést jelenített meg, amely felsorolja a régi projektfájllal kapcsolatos összes problémát.

Képernyőkép a frissítési jelentésről.

Ebben az esetben a problémák mind figyelmeztetések voltak, és a Visual Studio elvégezte a megfelelő módosításokat a projektfájlban. A projekt szempontjából a nagy különbség az, hogy a buildelési eszköz vcbuildról msbuildre változott. Ezt a módosítást először a Visual Studio 2010-ben vezették be. Más módosítások közé tartozik a projektfájl elemeinek sorrendjének átrendezése. Egyik probléma sem igényelt további figyelmet ehhez az egyszerű projekthez.

2. lépés. A build folyamatának indítása

Az összeállítás előtt ellenőrizzük a platformeszközöket, hogy tudjuk, milyen fordítóverziót használ a projektrendszer. A projekttulajdonságok párbeszédpanel Konfigurációs tulajdonságok csoportjában, az Általános kategóriában tekintse meg a Platformeszközök tulajdonságot . Tartalmazza a Visual Studio verzióját és a platformeszköz verziószámát, amely ebben az esetben az eszközök Visual Studio 2017-es verziójához készült 141-es verzió. Az eredetileg a Visual Studio 2010-ben, 2012-ben, 2013-ban vagy 2015-ben lefordított projektek konvertálásakor az eszközkészlet nem frissül automatikusan a legújabb eszközkészletre.

Ha Unicode-ra szeretne váltani, nyissa meg a projekt tulajdonságait a Konfiguráció tulajdonságai csoportban válassza az Általános szakaszt, és keresse meg a Karakterkészlet tulajdonságot . Módosítsa ezt a több bájtos karakterkészletrőlUnicode karakterkészlet használatára. Ennek a változásnak az a hatása, hogy most már a _UNICODE és a UNICODE-makrók vannak definiálva, és _MBCS nem, amelyet a Parancssor tulajdonság C/C++ kategóriájának tulajdonságok párbeszédpanelén ellenőrizheti.

/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

Bár a Scribble-projekt nem Unicode-karakterekkel való fordításra lett beállítva, a karakter helyett már TCHAR-val írták, így valójában semmit sem kell módosítani. A projekt a Unicode-karakterkészlettel sikeresen buildel.

Most hozza létre a megoldást. A kimeneti ablakban a fordító azt jelzi, hogy a _WINNT32_WINNT nincs definiálva:

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

Ez figyelmeztetés, nem hiba, és nagyon gyakori a Visual Studio C++ projekt frissítésekor. Ez a makró határozza meg, hogy mi a legalacsonyabb Windows-verzió, amelyen az alkalmazásunk futni fog. Ha figyelmen kívül hagyjuk a figyelmeztetést, elfogadjuk az alapértelmezett értéket _WIN32_WINNT_MAXVER, ami a Windows aktuális verzióját jelenti. A lehetséges értékek táblázatát a Windows-fejlécek használata című témakörben találhatja meg. Beállíthatjuk például, hogy a Vista bármely verzióján fusson.

#define _WIN32_WINNT _WIN32_WINNT_VISTA

Ha a kód a Windows API azon részeit használja, amelyek nem érhetők el a Windows ezen makróval megadott verziójában, ezt fordítóhibaként kell látnia. A Scribble-kód esetében nincs hiba.

3. lépés. Tesztelés és hibakeresés

Nincs tesztcsomag, ezért most indítottuk el az alkalmazást, és manuálisan teszteltük a funkcióit a felhasználói felületen keresztül. Nem észleltek problémákat.

4. lépés. A kód fejlesztése

Most, hogy migrált a Visual Studio 2017-be, érdemes lehet néhány módosítást végrehajtania, hogy kihasználhassa az új C++ funkciókat. A C++ fordító jelenlegi verziója sokkal jobban megfelel a C++ szabványnak, mint az előző verzióknak, ezért ha meggondolja magát, hogy néhány kódmódosítással biztonságosabbá és hordozhatóbbá tegye a kódot más fordítók és operációs rendszerek számára, érdemes megfontolnia néhány fejlesztést.

Következő lépések

A Scribble egy kis és egyszerű Windows asztali alkalmazás volt, és nem volt nehéz átalakítani. Sok kis, egyszerű alkalmazás ugyanolyan könnyen konvertálható az új verzióra. Az összetettebb alkalmazások esetében, amelyeknél több sornyi kód, régebbi régi kód nem felel meg a modern mérnöki szabványoknak, több projektnek és kódtárnak, egyéni buildelési lépéseknek vagy összetett szkriptelt automatizált buildeknek, több időt vesz igénybe a frissítés. Folytassa a következő példával, egy COM Spy nevű ATL/COM-alkalmazással.

Lásd még

Portolás és frissítés: Példák és esettanulmányok
Következő példa: COM Spy