Udostępnij za pośrednictwem


Przewodnik przenoszenia: Aplikacja Scribble MFC

Ten temat jest pierwszym z kilku tematów, które przedstawiają procedurę uaktualniania projektów Visual Studio C++ utworzonych w starszych wersjach programu Visual Studio do programu Visual Studio 2017. W tych tematach przedstawiono przykładowy proces uaktualniania, zaczynając od bardzo prostego projektu i przechodząc do nieco bardziej złożonych. W tym temacie pracujemy nad procesem uaktualniania dla określonego projektu, MFC Scribble. Jest on odpowiedni jako podstawowe wprowadzenie do procesu uaktualniania dla projektów C++.

Każda wersja programu Visual Studio wprowadza możliwe niezgodności, które mogą komplikować przenoszenie kodu ze starszej wersji programu Visual Studio do nowszej. Czasami wymagane zmiany są w kodzie, dlatego należy ponownie skompilować i zaktualizować kod, a czasami wymagane zmiany są w plikach projektu. Po otwarciu projektu utworzonego przy użyciu poprzedniej wersji programu Visual Studio program Visual Studio automatycznie pyta, czy zaktualizować projekt, czy rozwiązanie do najnowszej wersji. Te narzędzia zwykle uaktualniają tylko pliki projektu; nie modyfikują kodu źródłowego.

MFC Scribble

MFC Scribble to dobrze znany przykład, który został uwzględniony w wielu różnych wersjach języka Visual C++. Jest to prosta aplikacja do rysowania, która ilustruje niektóre podstawowe funkcje MFC. Dostępne są różne wersje, w tym wersje kodu zarządzanego i natywnego. W tym przykładzie znaleźliśmy starą wersję bazy danych w kodzie natywnym z programu Visual Studio 2005 i otworzyliśmy ją w programie Visual Studio 2017.

Przed podjęciem próby uaktualnienia upewnij się, że masz zainstalowane obciążenie pulpitu z systemem Windows. Otwórz instalatora programu Visual Studio (vs_installer.exe). Jednym ze sposobów otwarcia instalatora jest wybranie pozycji Plik>nowy projekt i przewinięcie do dołu listy zainstalowanych szablonów do momentu wyświetlenia pozycji Otwórz Instalator programu Visual Studio. Po otwarciu instalatora zostaną wyświetlone wszystkie dostępne obciążenia. Jeśli pole obciążenia pulpitu systemu Windows nie jest zaznaczone, zaznacz je i kliknij przycisk Modyfikuj w dolnej części okna.

Następnie wykonaj kopię zapasową całego rozwiązania i całej jego zawartości.

Na koniec otwórz rozwiązanie w najnowszej wersji programu Visual Studio i zezwól kreatorowi na konwersję projektu.

Należy pamiętać, że można również uruchomić devenv w wierszu polecenia, używając /Upgrade opcji , zamiast użyć kreatora do uaktualnienia projektów. Zobacz /Upgrade (devenv.exe). Może to być pomocne w automatyzowaniu procesu uaktualniania dla dużej liczby projektów.

Krok 1. Konwertowanie pliku projektu

Po otwarciu starego pliku projektu w programie Visual Studio program Visual Studio oferuje konwersję pliku projektu na najnowszą wersję, która została zaakceptowana. Zostanie wyświetlone następujące okno dialogowe:

Review Project and Solution Changes dialog.

Wystąpił błąd informujący nas, że obiekt docelowy Itanium jest niedostępny i nie zostanie przekonwertowany.

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?

W momencie utworzenia poprzedniego projektu Scribble itanium był ważną platformą docelową. Platforma Windows nie obsługuje już itanium, dlatego wybraliśmy opcję kontynuowania bez obsługi platformy Itanium.

Program Visual Studio wyświetlił raport migracji zawierający listę wszystkich problemów ze starym plikiem projektu.

Screenshot of the Upgrade Report.

W takim przypadku wszystkie problemy były ostrzeżeniami, a program Visual Studio dokonał odpowiednich zmian w pliku projektu. Duża różnica w zakresie projektu polega na tym, że narzędzie kompilacji zmieniło się z vcbuild na msbuild. Ta zmiana została po raz pierwszy wprowadzona w programie Visual Studio 2010. Inne zmiany obejmują pewne zmiany sekwencji elementów w samym pliku projektu. Żaden z problemów nie wymagał dalszej uwagi dla tego prostego projektu.

Krok 2. Uzyskiwanie go do kompilacji

Przed skompilowaniem sprawdzimy zestaw narzędzi platformy, aby wiedzieć, jakiej wersji kompilatora używa system projektu. W oknie dialogowym właściwości projektu w obszarze Właściwości konfiguracji w kategorii Ogólne przyjrzyj się właściwości Zestaw narzędzi platformy. Zawiera wersję programu Visual Studio i numer wersji narzędzia platformy, który w tym przypadku to wersja 141 dla programu Visual Studio 2017 w wersji narzędzi. Podczas konwertowania projektu, który został pierwotnie skompilowany przy użyciu programu Visual Studio 2010, 2012, 2013 lub 2015, zestaw narzędzi nie jest automatycznie aktualizowany do najnowszego zestawu narzędzi.

Aby przełączyć się na Unicode, otwórz właściwości projektu, w obszarze Właściwości konfiguracji wybierz sekcję Ogólne i znajdź właściwość Zestaw znaków. Zmień tę opcję na Użyj zestawu znaków wielobajtowych, aby użyć zestawu znaków Unicode. Efektem tej zmiany jest to, że teraz makra _UNICODE i UNICODE są zdefiniowane i _MBCS nie jest, co można sprawdzić w oknie dialogowym właściwości w kategorii C/C++ we właściwości Wiersza polecenia.

/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

Mimo że projekt Scribble nie został skonfigurowany do kompilowania z znakami Unicode, został już napisany z TCHAR zamiast znaku, więc nic rzeczywiście nie musi zostać zmienione. Projekt kompiluje się pomyślnie z zestawem znaków Unicode.

Teraz skompiluj rozwiązanie. W oknie danych wyjściowych kompilator informuje nas, że _WINNT32_WINNT nie jest zdefiniowana:

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

Jest to ostrzeżenie, a nie błąd i jest bardzo powszechne podczas uaktualniania projektu programu Visual Studio C++. Jest to makro, które definiuje najniższą wersję systemu Windows, na której będzie działać nasza aplikacja. Jeśli zignorujemy ostrzeżenie, akceptujemy wartość domyślną, _WIN32_WINNT_MAXVER, co oznacza bieżącą wersję systemu Windows. Aby uzyskać tabelę możliwych wartości, zobacz Using the Windows Headers (Używanie nagłówków systemu Windows). Na przykład możemy ustawić ją tak, aby była uruchamiana w dowolnej wersji od vista.

#define _WIN32_WINNT _WIN32_WINNT_VISTA

Jeśli kod używa części interfejsu API systemu Windows, które nie są dostępne w wersji systemu Windows określonej za pomocą tego makra, powinien zostać wyświetlony jako błąd kompilatora. W przypadku kodu Scribble nie ma błędu.

Krok 3. Testowanie i debugowanie

Nie ma zestawu testów, więc właśnie uruchomiliśmy aplikację, przetestowaliśmy jej funkcje ręcznie za pośrednictwem interfejsu użytkownika. Nie zaobserwowano żadnych problemów.

Krok 4. Ulepszanie kodu

Po przeprowadzeniu migracji do programu Visual Studio 2017 możesz wprowadzić pewne zmiany, aby skorzystać z nowych funkcji języka C++. Bieżąca wersja kompilatora języka C++ jest znacznie bardziej zgodna ze standardem C++, a więc jeśli masz umysł, aby wprowadzić pewne zmiany w kodzie, aby kod był bardziej bezpieczny i bardziej przenośny dla innych kompilatorów i systemów operacyjnych, należy rozważyć pewne ulepszenia.

Następne kroki

Scribble był małą i prostą aplikacją klasyczną systemu Windows i nie było trudno ją przekonwertować. Wiele małych, prostych aplikacji konwertuje się tak samo łatwo do nowej wersji. W przypadku bardziej złożonych aplikacji, w przypadku wielu innych wierszy kodu starszego kodu, które mogą nie być zgodne z nowoczesnymi standardami inżynieryjnymi, wieloma projektami i bibliotekami, niestandardowymi krokami kompilacji lub złożonymi zautomatyzowanymi kompilacjami skryptowymi, uaktualnienie zajmie więcej czasu. Kontynuuj pracę z następnym przykładem, aplikacją ATL/COM o nazwie COM Spy.

Zobacz też

Przenoszenie i uaktualnianie: Przykłady i analizy przypadków
Następny przykład: COM Spy