유니버설 Windows 플랫폼으로 포팅(C++)Porting to the Universal Windows Platform (C++)

이 항목에서는 Windows 10 앱 플랫폼인 유니버설 Windows 플랫폼에 기존 C++ 코드를 이식하는 방법에 대한 정보를 찾을 수 있습니다.In this topic, you can find information on how to port existing C++ code to the Windows 10 app platform, the Universal Windows Platform. 유니버설 이라는 용어는 코드가 데스크톱, 휴대폰, 태블릿 및 앞으로 제공될 장치(Windows 10 실행)를 비롯하여 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. Windows 10을 실행하는 모든 장치에서 제대로 작동하는 단일 XAML 기반 사용자 인터페이스 및 단일 프로젝트를 만듭니다.You create a single project and a single XAML-base user interface that works well on any device that runs Windows 10. XAML의 동적 레이아웃 기능을 사용하여 앱 UI를 다른 디스플레이 크기에 맞출 수 있습니다.You can use dynamic layout features in XAML to allow the app's UI to adapt to different display sizes.

Windows 개발자 센터 설명서에는 유니버설 Windows 플랫폼으로 Windows 8.1 앱을 포팅하기 위한 가이드가 포함되어 있습니다.The Windows Dev Center documentation contains a guide for porting Windows 8.1 apps to the Universal Windows Platform. Windows 런타임 8에서 UWP로 이동을 참조하세요.See Move from Windows Runtime 8 to UWP. 이 가이드는 C# 코드에 주로 초점을 맞추고 있지만 대부분의 지침이 C++에도 적용됩니다.Although the guide focused mostly on C# code, most of the guidance is applicable to C++. 다음 절차에는 보다 자세한 정보가 포함되어 있습니다.The following procedures contain more detailed information.

이 항목에는 코드를 UWP로 포팅하기 위한 다음 절차가 포함되어 있습니다.This topic contains the following procedures for porting code to the UWP.

  1. Windows 8.1 스토어 앱을 UWP에 이식Porting a Windows 8.1 Store App to the UWP

  2. Windows 8.1 런타임 구성 요소를 UWP에 이식Porting a Windows 8.1 Runtime Component to the UWP

    클래식 데스크톱 Win32 DLL이 있는 상태에서 UWP 응용 프로그램에서 이 파일을 호출하려는 경우에도 이 작업을 수행할 수 있습니다.If you have a classic desktop Win32 DLL and you want to call it from a UWP application, you can do that as well. 이러한 절차를 사용하여 기존 클래식 Windows 데스크톱 C++ 응용 프로그램에 대한 UWP 사용자 인터페이스 레이어 또는 플랫폼 간 표준 C++ 코드를 만들 수 있습니다.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. 방법: 유니버설 Windows 플랫폼 앱에서 기존 C++ 코드 사용을 참조하세요.See How to: Use Existing C++ Code in a Universal Windows Platform App.

Windows 8.1 스토어 앱을 UWP에 포팅Porting a Windows 8.1 Store App to the UWP

Windows 8.1 스토어 앱을 사용하는 경우 이러한 작업을 위해 UWP 및 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. 컴파일러 및 라이브러리 변경으로 인해 발생하는 모든 문제를 제거하려면 먼저 Visual Studio 2017에서 Windows 8.1 프로젝트로 빌드하는 것이 좋습니다.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. 작업을 완료한 후 이 작업을 Windows 10 UWP 프로젝트로 변환하는 두 가지 방법이 있습니다.Once you've done that, there are two ways to convert this to a Windows 10 UWP project. 가장 쉬운 방법은(다음 절차에서 설명) 유니버설 Windows 프로젝트를 만들고 기존 코드를 복사하는 것입니다.The easiest way (as explained in the following procedure) is to create a Universal Windows project, and copy your existing code into it. Windows 8.1 데스크톱 및 Windows 8.1 Phone용 유니버설 프로젝트를 사용한 경우 프로젝트는 XAML의 두 개의 다른 레이아웃으로 시작되지만 디스플레이 크기에 맞게 조정되는 단일 동적 레이아웃으로 끝납니다.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.

Windows 8.1 스토어 앱을 UWP에 이식하려면To port a Windows 8.1 Store App to the UWP

  1. Visual Studio 2017에서 아직 Windows 8.1 앱 프로젝트를 열지 않은 경우 프로젝트를 열고 지침에 따라 프로젝트 파일을 업그레이드합니다.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.

    Visual Studio 설치 프로그램에서 Windows 8.1 도구를 설치해야 합니다.You need to have installed the Windows 8.1 Tools in Visual Studio setup. 이러한 도구를 설치하지 않은 경우 프로그램 및 기능 창에서 Visual Studio 설치를 시작하고 Visual Studio 2017을 선택한 후 설치 창에서 수정을 선택합니다.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. Windows 8.1 도구를 찾은 후 선택되어 있는지 확인하고 확인을 선택합니다.Locate Windows 8.1 Tools, make sure it is selected, and choose OK.

  2. 프로젝트 속성 창을 열고 C++, 일반에서 플랫폼 도구 집합을 Visual Studio 2017용 빌드 도구인 v141로 설정합니다.Open the Project Properties window, and under C++, General, set the Platform Toolset to v141, the build tools for Visual Studio 2017.

  3. 프로젝트를 Windows 8.1 프로젝트로 빌드하고 빌드 오류를 해결합니다.Build the project as a Windows 8.1 project, and address any build errors. 이 단계에서 발생하는 모든 오류는 빌드 도구 및 라이브러리의 주요 변경 내용 때문일 수 있습니다.Any errors at this stage are probably due to breaking changes in the build tools and libraries. 코드에 영향을 줄 수 있는 변경 내용에 대한 자세한 내용은 Visual C++ 변경 기록 2003 - 2015을 참조하세요.See Visual C++ change history 2003 - 2015 for a detailed explanation of the changes that might affect your code.

    프로젝트가 잘 빌드되면 유니버설 Windows(Windows 10)에 이식할 수 있습니다.Once your project builds cleanly, you are ready to port to Universal Windows (Windows 10).

  4. 빈 템플릿을 사용하여 새 유니버설 Windows 앱 프로젝트를 만듭니다.Create a new Universal Windows App project using the Blank template. 기존 프로젝트와 동일한 이름을 부여할 수 있지만 이렇게 하려면 두 프로젝트를 다른 디렉터리에 두어야 합니다.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. 솔루션을 닫고 Windows 탐색기 또는 명령줄을 사용하여 Windows 8.1 프로젝트의 코드 파일(확장명 .cpp, .h 및 .xaml)을 1단계에서 만든 프로젝트의 프로젝트 파일(.vcxproj)과 동일한 폴더로 복사합니다.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. Package.appxmanifest 파일은 복사하지 않도록 합니다. Windows 8.1 데스크톱 및 휴대폰에 대해 별도 코드를 작성한 경우 둘 중 하나를 먼저 선택하여 이식합니다(나중에 두 코드 조정을 위한 작업이 필요함).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). 하위 폴더와 해당 내용도 복사해야 합니다.Be sure to copy and subfolders and their contents. 이름이 중복된 파일이 있으면 파일을 바꾸라는 메시지가 표시됩니다.If prompted, choose to replace any files with duplicate names.

  6. 솔루션을 다시 열고 프로젝트 노드에 대한 바로 가기 메뉴에서 기존 항목 추가 를 선택합니다.Reopen the solution, and choose Add, Existing Item from the shortcut menu for the project node. 프로젝트에 이미 속해 있는 파일을 제외하고 복사한 모든 파일을 선택합니다.Select all the files you copied, except any that are already part of the project.

    모든 하위 폴더를 선택하고 포함된 파일도 모두 추가합니다.Check any subfolders and make sure to add the files in them as well.

  7. 이전 프로젝트와 이름이 같은 프로젝트를 사용하지 않을 경우 Package.appxmanifest 파일을 열고 앱 클래스에 대한 네임스페이스 이름을 반영하도록 진입점을 업데이트합니다.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.

    Package.appxmanifest 파일의 진입점 필드에는 앱 클래스에 대해 범위가 지정된 이름이 포함됩니다. 이 이름에는 앱 클래스를 포함하는 네임스페이스가 들어 있습니다.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. 유니버설 Windows 프로젝트를 만들 경우 네임스페이스는 프로젝트의 이름으로 설정됩니다.When you create a Universal Windows project, the namespace is set to the name of the project. 이전 프로젝트에서 복사한 파일에 포함된 것과 다를 경우 일치하도록 업데이트해야 합니다.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. 프로젝트를 빌드하고 여러 다른 Windows SDK 버전 간의 주요 변경 사항으로 인해 발생하는 빌드 오류를 해결합니다.Build the project, and address any build errors due to breaking changes between the different versions of the Windows SDK.

  9. 로컬 데스크톱에서 프로젝트를 실행합니다.Run the project on the Local 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. 다른 장치(Windows Phone 8.1)용의 별도 코드 파일 및 .xaml이 있을 경우 이 코드를 검사하고 표준 장치와 다른 부분을 확인합니다.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. 레이아웃에서만 차이가 있는 경우 xaml에서 Visual State Manager를 사용하여 화면 크기에 따라 디스플레이를 사용자 지정할 수 있습니다.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. 다른 차이점에 대해서는 다음 #if 문을 사용하여 코드에서 조건 섹션을 사용할 수 있습니다.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)  
    

    이러한 문은 각각 Windows 스토어 앱, Windows Phone 스토어 앱 중 하나 또는 둘 다에 적용되거나 적용되지 않습니다(클래식 Win32 데스크톱만 해당).These statements respectively apply to Windows Store apps, Windows Phone Store apps, both, or neither (classic Win32 desktop only). 이러한 매크로는 Windows SDK 8.1 이상에서만 사용할 수 있으므로 이전 버전의 Windows SDK 또는 Windows 이외의 다른 플랫폼 용으로 코드를 컴파일해야 하면 이러한 매크로가 정의되지 않은 경우도 고려해야 합니다.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. 앱이 지원하는 각 장치 종류에 대해 에뮬레이터 또는 실제 장치에서 앱을 실행하고 디버그합니다.Run and debug the app on an emulator or physical device, for each type of device that your app supports. 에뮬레이터를 실행하려면 가상 컴퓨터가 아닌 실제 컴퓨터에서 Visual Studio를 실행해야 합니다.To run an emulator, you need to run Visual Studio on a physical computer, not a virtual machine.

Windows 8.1 런타임 구성 요소를 UWP에 이식Porting a Windows 8.1 Runtime Component to the UWP

Windows 8.1 스토어 앱에서 이미 작동되는 DLL 또는 Windows 런타임 구성 요소가 있는 경우 다음 절차에 따라 구성 요소 또는 DLL이 UWP 및 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. 기본 절차는 새 프로젝트를 만들고 코드를 복사하는 것입니다.The basic procedure is to create a new project and copy your code into it.

Windows 8.1 런타임 구성 요소를 UWP에 포팅하려면To port a Windows 8.1 Runtime Component to the UWP

  1. Visual Studio 2017의 새 프로젝트 대화 상자에서 Windows 유니버설 노드를 찾습니다.In the New Project dialog in Visual Studio 2017, locate the Windows Universal node. 이 노드가 표시되지 않으면 먼저 Windows 10용 도구 를 설치합니다.If you don't see this node, install the Tools for Windows 10 first. Windows 런타임 구성 요소 템플릿을 선택하고 구성 요소에 이름을 지정한 다음 확인 단추를 선택합니다.Choose the Windows Runtime Component template, give a name for your component, and choose the OK button. 구성 요소 이름은 네임스페이스 이름으로 사용되므로 이전 프로젝트의 네임스페이스와 동일한 이름을 사용하려고 할 수 있습니다.The component name will be used as the namespace name, so you might want to use the same name as your old projects' namespace. 그러려면 이전과 다른 폴더에 프로젝트를 만들어야 합니다.This requires that you create the project in a different folder from the old one. 다른 이름을 선택하면 생성된 코드 파일에서 네임스페이스 이름을 업데이트할 수 있습니다.If you choose a different name, you can update the namespace name in the generated code files.

  2. 프로젝트를 닫습니다.Close the project.

  3. 새로 만든 프로젝트에 Windows 8.1 구성 요소의 모든 코드 파일(.cpp, .h,.xaml 등)을 복사합니다.Copy all the code files (.cpp, .h, .xaml, etc.) from your Windows 8.1 component into your newly created project. Package.appxmanifest 파일은 복사하지 마세요.Do not copy the Package.appxmanifest file.

  4. 빌드하고 여러 다른 Windows SDK 버전 간의 주요 변경 사항으로 인해 발생하는 오류를 해결합니다.Build, and resolve any errors due to breaking changes between different versions of the Windows SDK.

문제 해결Troubleshooting

유니버설 Windows 플랫폼으로 코드를 이식하는 프로세스 동안 다양한 오류가 발생할 수 있습니다.You might encounter various errors during the process of porting code to the Universal Windows Platform. 다음은 발생할 수 있는 몇 가지 문제입니다.Here are some of the possible problems you might encounter.

프로젝트 구성 문제Project Configuration Issues

다음 오류가 발생할 수 있습니다.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  

이 문제가 발생하면 프로젝트가 Windows 유니버설 프로젝트로 빌드되지 않습니다.If this happens, the project is not building as a Windows Universal project. 프로젝트 파일을 확인하고, 프로젝트를 Windows 유니버설 프로젝트로 식별하는 올바른 XML 요소가 있는지 확인합니다.Check the project file and make sure it has the correct XML elements that identify a project as a Windows Universal Project. 다음과 같은 요소가 있어야 합니다(대상 플랫폼의 버전 번호가 다를 수 있음).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>  

Visual Studio를 사용하여 새 유니버설 Windows 플랫폼 프로젝트를 만든 경우 이 오류가 나타나지 않습니다.If you created a new Universal Windows Platform project using Visual Studio, you should not see this error.

참고 항목See Also

Visual C++ 포팅 가이드 Visual C++ Porting Guide
UWP(유니버설 Windows 플랫폼)용 앱 개발Develop apps for the Universal Windows Platform (UWP)