포팅 가이드: MFC ScribblePorting Guide: MFC Scribble

이 항목은 이전 버전의 Visual Studio에서 만든 Visual C++ 프로젝트를 Visual Studio 2017로 업그레이드하는 절차를 소개하는 여러 항목 중 첫 번째입니다.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. 이러한 항목에서는 예를 들어 매우 간단한 프로젝트부터 좀더 복잡한 프로젝트로 이동하는 업그레이드 프로세스를 소개합니다.These topics introduce the upgrade process by example, starting with a very simple project and moving to slightly more complex ones. 이 항목에서는 MFC Sribble이라는 특정 프로젝트에 대한 업그레이드 프로세스를 안내합니다.In this topic, we work through the upgrade process for a specific project, MFC Scribble. C++ 프로젝트에 대한 업그레이드 프로세스의 기본 사항을 소개하는 데 적합합니다.It is suitable as a basic introduction to the upgrade process for C++ projects.

각 Visual Studio 버전에는 이전 버전의 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. 코드에 필요한 변경이 있어서 코드를 다시 컴파일하고 업데이트해야 하는 경우도 있고, 프로젝트 파일에 필요한 변경이 있는 경우도 있습니다.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. 이전 버전의 Visual Studio에서 만든 프로젝트를 여는 경우 Visual Studio에서 프로젝트 또는 솔루션을 최신 버전으로 업데이트할지 여부를 묻는 메시지를 자동으로 표시합니다.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. 이러한 도구는 일반적으로 프로젝트 파일만 업그레이드하고 소스 코드를 수정하지 않습니다.These tools usually upgrade only the project files; they do not modify your source code.

MFC ScribbleMFC Scribble

MFC Scribble은 다양한 버전의 Visual C++에 포함된 잘 알려진 샘플입니다.MFC Scribble is a well-known sample that has been included in many different releases of Visual C++. MFC의 기본 기능 중 일부를 보여 주는 간단한 그리기 응용 프로그램입니다.It's a simple drawing application that illustrates some of the basic features of MFC. 관리 코드 및 네이티브 코드 버전을 포함하여 다양한 버전으로 제공됩니다.There are various versions of it available, including both managed and native code versions. 이 예제에서는 Visual Studio 2005에서 네이티브 코드로 작성된 이전 버전의 Scribble을 찾아 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.

업그레이드하기 전에 Windows 데스크톱 작업이 설치되어 있는지 확인합니다.Before attempting to upgrade, make sure that you have the Windows Desktop workload installed. Visual Studio 설치 관리자(vs_installer.exe)를 엽니다.Open the Visual Studio installer (vs_installer.exe). 설치 관리자를 여는 한 가지 방법은 파일 | 새 프로젝트를 선택하고 "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". 설치 관리자를 열면 사용 가능한 작업이 모두 표시됩니다.After opening the installer you will see all the available workloads. Windows 데스크톱 작업 확인란이 선택되어 있지 않으면 확인란을 선택하고 창의 맨 아래에 있는 수정 단추를 클릭합니다.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.

다음으로, 전체 솔루션과 해당 콘텐츠를 모두 백업합니다.Next, back up the entire solution and all its contents.

마지막으로, 특정 업그레이드 방법을 결정해야 했습니다.Finally, we needed to decide on the specific method of upgrade. 오랫동안 업그레이드되지 않은 더 복잡한 솔루션 및 프로젝트의 경우 한 번에 한 버전씩 Visual Studio 업그레이드를 고려해야 합니다.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. 이런 방식으로 문제가 발생한 Visual Studio 버전을 식별할 수 있습니다.That way, you can narrow down which version of Visual Studio introduced a problem. 간단한 프로젝트의 경우 최신 버전의 Visual Studio에서 열고 마법사에서 프로젝트를 변환하도록 시도할 수 있습니다.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. 이 방법이 효과가 없을 경우 해당 버전의 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.

마법사를 사용하여 프로젝트를 업그레이드하는 대신 /Upgrade 옵션을 사용하여 명령줄에서 devenv를 실행할 수도 있습니다.Note that you can also run devenv at the command line, using the /Upgrade option, instead of using the wizard to upgrade your projects. /Upgrade (devenv.exe)를 참조하세요.See /Upgrade (devenv.exe). 이 작업은 다수의 프로젝트에 대해 업그레이드 프로세스를 자동화하는 데 유용할 수 있습니다.That could be helpful in automating the upgrade process for a large number of projects.

1단계:Step 1. 프로젝트 파일 변환Converting the Project File

Visual Studio 2017에서 이전 프로젝트 파일을 여는 경우 Visual Studio에서 프로젝트 파일을 최신 버전으로 변환하도록 제안하며, 이 제안을 수락했습니다.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. 다음과 같은 대화 상자가 나타납니다.The following dialog box appeared:

프로젝트 및 솔루션 변경 내용 검토Review Project and Solution Changes

Itanium 대상을 사용할 수 없어 변환되지 않는다고 알리는 오류가 발생했습니다.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?  

이전 Scribble 프로젝트를 만들 때 Itanium은 중요한 대상 플랫폼이었습니다.At the time the previous Scribble project was created, Itanium was an important target platform. Windows 플랫폼은 더 이상 Itanium을 지원하지 않으므로 Itanium 플랫폼을 지원하지 않고 계속하도록 선택했습니다.The Windows platform no longer supports Itanium, so we chose to continue without supporting the Itanium platform.

그런 다음 visual Studio에서 이전 프로젝트 파일의 모든 문제를 나열하는 마이그레이션 보고서를 표시했습니다.Visual Studio then displayed a migration report listing all of the issues with the old project file.

업그레이드 보고서Upgrade Report

이 경우 문제는 모두 경고였으며, Visual Studio에서 프로젝트 파일을 적절하게 변경했습니다.In this case, the issues were all warnings, and Visual Studio made the appropriate changes in the project file. 프로젝트와 관련해서 가장 큰 차이점은 빌드 도구가 vcbuild에서 msbuild로 변경된 것입니다.The big difference as far as the project is concerned is that the build tool changed from vcbuild to msbuild. 이 변경 내용은 Visual Studio 2010에서 처음 도입되었습니다.This change was first introduced in Visual Studio 2010. 기타 변경 내용에는 프로젝트 파일 자체의 요소 시퀀스 다시 정렬이 포함됩니다.Other changes include some rearrangement of the sequence of elements in the project file itself. 이 간단한 프로젝트에서 추가로 주의해야 할 문제는 없었습니다.None of the issues required further attention for this simple project.

2단계.Step 2. 빌드Getting it to build

빌드하기 전에 프로젝트 시스템에서 사용 중인 컴파일러 버전을 알 수 있도록 플랫폼 도구 집합을 확인합니다.Before building, we check the platform toolset so we know what compiler version the project system is using. 프로젝트 속성 대화 상자의 구성 속성 아래, 일반 범주에서 플랫폼 도구 집합 속성을 확인합니다.In the project properties dialog, under Configuration Properties, in the General category, look at the Platform Toolset property. Visual Studio 버전 및 플랫폼 도구 버전 번호(이 경우 Visual Studio 2017 버전의 도구에 해당하는 v141)이 포함되어 있습니다.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. 원래 Visual C++ 2010, 2012, 2013 또는 2015를 사용하여 컴파일된 프로젝트를 변환하는 경우 도구 집합이 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.

유니코드로 전환하려면 프로젝트의 속성을 열고 구성 속성 아래에서 일반 섹션을 선택한 다음 문자 집합 속성을 찾습니다.To make the switch to Unicode, open the project's properties, under Configuration Properties, choose the General section, and locate the Character Set property. 이 속성을 멀티바이트 문자 집합 사용에서 유니코드 문자 집합 사용으로 변경합니다.Change this from Use Multi-Byte Character Set to Use Unicode Character Set. 이렇게 변경하면 _UNICODE 및 UNICODE 매크로가 정의되고 _MBCS는 정의되지 않습니다. 이는 속성 대화 상자의 C/C++ 범주 아래, 명령줄 속성에서 확인할 수 있습니다.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 

Scribble 프로젝트는 유니코드 문자를 사용하여 컴파일되도록 설정되지 않았지만 이미 char 대신 TCHAR로 작성되었으므로 실제로 변경해야 할 사항이 없습니다.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. 프로젝트가 유니코드 문자 집합을 사용하여 성공적으로 빌드됩니다.The project builds successfully with the Unicode character set.

이제 솔루션을 빌드하겠습니다.Now build the solution. 컴파일러에서 출력 창을 통해 _WINNT32_WINNT가 정의되지 않았다고 알립니다.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)  

이는 오류가 아니라 경고이며, Visual C++ 프로젝트를 업그레이드할 때 흔히 발생합니다.This is a warning, not an error, and is very common when upgrading a Visual C++ project. 응용 프로그램이 실행되는 가장 낮은 버전의 Windows를 정의하는 매크로입니다.This is the macro that defines what the lowest version of Windows that our application will run on. 경고를 무시하는 경우 현재 버전의 Windows를 의미하는 기본값 _WIN32_WINNT_MAXVER을 수락하는 것입니다.If we ignore the warning, we accept the default value, _WIN32_WINNT_MAXVER, which means the current version of Windows. 가능한 값의 테이블은 Using the Windows Headers(Windows 헤더 사용)을 참조하세요.For a table of possible values, see Using the Windows Headers. 예를 들어 Vista부터 모든 버전에서 실행되도록 설정할 수 있습니다.For example, we can set it to run on any version from Vista onwards.

#define _WIN32_WINNT _WIN32_WINNT_VISTA  

코드에서 이 매크로로 지정한 Windows 버전에서 사용할 수 없는 Windows API의 일부를 사용하는 경우 컴파일러 오류로 표시됩니다.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. Scribble 코드의 경우 오류가 없습니다.In the case of the Scribble code, there is no error.

3단계.Step 3. 테스트 및 디버깅Testing and debugging

테스트 도구 모음이 없으므로 앱을 시작하고 UI를 통해 수동으로 해당 기능을 테스트했습니다.There is no test suite, so we just started the app, tested its features manually through the UI. 문제가 발견되지 않았습니다.No issues were observed.

4단계.Step 4. 코드 개선Improve the code

이제 Visual Studio 2017로 마이그레이션했으므로 새로운 C++ 기능을 활용하기 위해 일부 변경 작업을 수행하는 것이 좋습니다.Now that you've migrated to Visual Studio 2017, you might want to make some changes to take advantage of new C++ features. 현재 버전의 Visual C++ 컴파일러는 이전 버전보다 C++ 표준에 훨씬 더 부합되므로 코드를 더 안전하고 다른 컴파일러 및 운영 체제로 포팅하기 쉽게 변경하려는 경우 몇 가지 향상된 기능을 고려해야 합니다.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.

다음 단계Next steps

Scribble은 작고 간단한 Windows 데스크톱 응용 프로그램이며 변환하기 어렵지 않았습니다.Scribble was a small and simple Windows desktop application, and it wasn't hard to convert. 마찬가지로, 대부분의 작고 간단한 앱은 쉽게 새 버전으로 변환됩니다.Many small, simple apps convert just as easily to the new version. 많은 줄의 코드, 최신 엔지니어링 표준에 부합되지 않는 레거시 코드, 여러 프로젝트와 라이브러리, 사용자 지정 빌드 단계를 포함하는 더 복잡한 응용 프로그램이나 복잡한 스크립팅된 자동화 빌드의 경우 업그레이드하는 데 더 오랜 시간이 걸립니다.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. 다음 예제인 COM Spy라는 ATL/COM 응용 프로그램으로 계속합니다.Continue with the next example, an ATL/COM application called COM Spy.

참고 항목See Also

포팅 및 업그레이드: 예제 및 사례 연구 Porting and Upgrading: Examples and Case Studies
다음 예제: COM SpyNext Example: COM Spy