C++/WinRT 소개Introduction to C++/WinRT

 

 

C++/WinRT는 헤더 파일 기반 라이브러리로 구현된 WinRT(Windows 런타임) API용 최신의 완전한 표준 C++17 언어 프로젝션이며, 최신 Windows API에 최고 수준의 액세스를 제공하도록 설계되었습니다.C++/WinRT is an entirely standard modern C++17 language projection for Windows Runtime (WinRT) APIs, implemented as a header-file-based library, and designed to provide you with first-class access to the modern Windows API. C++/WinRT를 사용하면 모든 표준 호환 C++17 컴파일러를 통해 Windows 런타임 API를 작성하고 사용할 수 있습니다.With C++/WinRT, you can author and consume Windows Runtime APIs using any standards-compliant C++17 compiler. Windows SDK는 C++/WinRT를 포함하며, 10.0.17134.0 버전(Windows 10 버전 1803)에서 도입되었습니다.The Windows SDK includes C++/WinRT; it was introduced in version 10.0.17134.0 (Windows 10, version 1803).

C++/WinRT는 Microsoft에서 추천하는 C++/CX 언어 프로젝션 및 Windows 런타임 C++ 템플릿 라이브러리(WRL)용 대체 언어입니다.C++/WinRT is Microsoft's recommended replacement for the C++/CX language projection, and the Windows Runtime C++ Template Library (WRL). C++/WinRT 관련 항목의 전체 목록에는 C++/CX 및 WRL과 상호 운용하고 이 언어에서 이식하는 방법에 대한 정보가 모두 포함됩니다.The full list of topics about C++/WinRT includes info about both interoperating with, and porting from, C++/CX and WRL.

중요

알아 두어야 할 가장 중요한 몇 가지 C++/WinRT 정보는 C++/WinRT에 대한 SDK 지원 섹션과 C++/WinRT, XAML, VSIX 확장 및 NuGet 패키지에 대한 Visual Studio 지원 섹션에 설명되어 있습니다.Some of the most important pieces of C++/WinRT to be aware of are described in the sections SDK support for C++/WinRT and Visual Studio support for C++/WinRT, XAML, the VSIX extension, and the NuGet package.

언어 프로젝션Language projections

Windows 런타임은 COM(구성 요소 개체 모델) API를 기반으로 하며, ‘언어 프로젝션’을 통해 액세스하도록 설계되었습니다. The Windows Runtime is based on Component Object Model (COM) APIs, and it's designed to be accessed through language projections. 프로젝션은 COM 세부 정보를 숨기며, 지정된 언어에 더욱 자연스러운 프로그래밍 환경을 제공합니다.A projection hides the COM details, and provides a more natural programming experience for a given language.

Windows UWP API 참조 콘텐츠의 C++/WinRT 언어 프로젝션The C++/WinRT language projection in the Windows UWP API reference content

Windows UWP API를 검색할 때는 오른쪽 위에 있는 언어 콤보 상자를 클릭하고 C++/WinRT를 선택하여 C++/WinRT 언어 프로젝션에 표시되는 API 구문 블록을 확인합니다.When you're browsing Windows UWP APIs, click the Language combo box in the upper right, and select C++/WinRT to view API syntax blocks as they appear in the C++/WinRT language projection.

C++/WinRT, XAML, VSIX 확장 및 NuGet 패키지에 대한 Visual Studio 지원Visual Studio support for C++/WinRT, XAML, the VSIX extension, and the NuGet package

Visual Studio 지원의 경우 Visual Studio 2019 또는 Visual Studio 2017(최소 15.6 버전, 15.7 이상 권장)이 필요합니다.For Visual Studio support, you'll need Visual Studio 2019 or Visual Studio 2017 (at least version 15.6; we recommend at least 15.7). Visual Studio Installer 내에서 유니버설 Windows 플랫폼 개발 워크로드를 설치합니다.From within the Visual Studio Installer, install the Universal Windows Platform Development workload. 설치 세부 정보 > 유니버설 Windows 플랫폼 개발에서 C++(v14x) 유니버설 Windows 플랫폼 도구 옵션을 확인합니다(아직 확인하지 않은 경우).In Installation Details > Universal Windows Platform development, check the C++ (v14x) Universal Windows Platform tools option(s), if you haven't already done so. 또한 Windows 설정 > 업데이트 & 보안 > 개발자용에서 사이드로드 앱 옵션 대신에 개발자 모드 옵션을 선택합니다.And, in Windows Settings > Update & Security > For developers, choose the Developer mode option rather than the Sideload apps option.

Visual Studio 및 Windows SDK의 최신 버전을 사용하여 개발하는 것이 좋지만 10.0.17763.0(Windows 10 버전 1809) 이전에 Windows SDK와 함께 제공된 C++/WinRT 버전을 사용하는 경우, 위에서 언급한 Windows 네임스페이스 헤더를 사용하려면 10.0.17134.0(Windows 10 버전 1803)의 프로젝트에서 최소한의 Windows SDK 대상 버전이 필요합니다.While we recommend that you develop with the latest versions of Visual Studio and the Windows SDK, if you're using a version of C++/WinRT that shipped with the Windows SDK prior to 10.0.17763.0 (Windows 10, version 1809), then, to use the the Windows namespaces headers mentioned above, you'll need a minimum Windows SDK target version in your project of 10.0.17134.0 (Windows 10, version 1803).

Visual Studio Marketplace에서 C++/WinRT Visual Studio 확장(VSIX)의 최신 버전을 다운로드하여 설치하려고 합니다.You'll want to download and install the latest version of the C++/WinRT Visual Studio Extension (VSIX) from the Visual Studio Marketplace.

  • VSIX 확장에서 제공하는 Visual Studio의 C++/WinRT 프로젝트 및 항목 템플릿을 사용하여 C++/WinRT 개발을 시작할 수 있습니다.The VSIX extension gives you C++/WinRT project and item templates in Visual Studio, so that you can get started with C++/WinRT development.
  • 또한 함께 제공되는 C++/WinRT 프로젝션된 형식의 Visual Studio 기본 디버그 시각화(natvis)를 통해 C# 디버깅과 유사한 환경이 구현됩니다.In addition, it gives you Visual Studio native debug visualization (natvis) of C++/WinRT projected types; providing an experience similar to C# debugging. Natvis는 디버그 빌드에서 자동으로 실행됩니다.Natvis is automatic for debug builds. WINRT_NATVIS 기호를 정의하여 빌드를 릴리스할 수도 있습니다.You can opt into it release builds by defining the symbol WINRT_NATVIS.

C++/WinRT에 대한 Visual Studio 프로젝트 템플릿은 아래 섹션에서 설명합니다.The Visual Studio project templates for C++/WinRT are described in the sections below. 최신 버전의 VSIX 확장이 설치된 C++/WinRT 프로젝트를 새로 만들면 이 프로젝트에서 자동으로 Microsoft.Windows.CppWinRT NuGet 패키지를 설치합니다.When you create a new C++/WinRT project with the latest version of the VSIX extension installed, the new C++/WinRT project automatically installs the Microsoft.Windows.CppWinRT NuGet package. Microsoft.Windows.CppWinRT NuGet 패키지는 C++/WinRT 빌드 지원(MSBuild 속성 및 대상)을 제공하므로, VSIX 확장은 설치되지 않고 NuGet 패키지만 설치된 개발 머신과 빌드 에이전트 사이에 프로젝트를 이식할 수 있습니다.The Microsoft.Windows.CppWinRT NuGet package provides C++/WinRT build support (MSBuild properties and targets), making your project portable between a development machine and a build agent (on which only the NuGet package, and not the VSIX extension, is installed).

또는 Microsoft.Windows.CppWinRT NuGet 패키지를 수동으로 설치하여 기존 프로젝트를 변환할 수 있습니다.Alternatively, you can convert an existing project by manually installing the Microsoft.Windows.CppWinRT NuGet package. VSIX 확장의 최신 버전을 설치하거나 이 버전으로 업데이트한 후 Visual Studio에서 기존 프로젝트를 열고 프로젝트 > NuGet 패키지 관리... 를 클릭합니다. > 찾아보기를 클릭합니다. 검색 상자에 Microsoft.Windows.CppWinRT를 입력하거나 붙여넣고 검색 결과에서 항목을 선택한 다음, 설치를 클릭하여 해당 프로젝트용 패키지를 설치합니다.After installing (or updating to) the latest version of the VSIX extension, open the existing project in Visual Studio, click Project > Manage NuGet Packages... > Browse, type or paste Microsoft.Windows.CppWinRT in the search box, select the item in search results, and then click Install to install the package for that project. 패키지 추가를 마쳤으면 이제 cppwinrt.exe 도구 호출을 포함해 프로젝트에 대한 C++/WinRT MSBuild 지원을 가져옵니다.Once you've added the package, you'll get C++/WinRT MSBuild support for the project, including invoking the cppwinrt.exe tool.

중요

1.0.190128.4보다 이전 버전의 VSIX 확장을 사용하여 생성되거나 이 버전에서 작동하도록 업그레이드된 프로젝트가 있는 경우에는 이전 버전의 VSIX 확장을 참조하세요.If you have projects that were created with (or upgraded to work with) a version of the VSIX extension earlier than 1.0.190128.4, then see Earlier versions of the VSIX extension. 이 섹션에는 최신 버전의 VSIX 확장을 사용하도록 업그레이드하기 위해 알고 있어야 하는 프로젝트 구성에 대한 중요한 정보가 포함됩니다.That section contains important info about the configuration of your projects, which you'll need to know to upgrade them to use the latest version of the VSIX extension.

  • C++/WinRT는 C++17 표준의 기능을 사용하므로 NuGet 패키지는 Visual Studio에서 프로젝트 속성 C/C++ > 언어 > C++ 언어 표준 > ISO C++17 표준(/std:c++17) 을 설정합니다.Because C++/WinRT uses features from the C++17 standard, the NuGet package sets project property C/C++ > Language > C++ Language Standard > ISO C++17 Standard (/std:c++17) in Visual Studio.
  • /bigobj 컴파일러 옵션도 추가합니다.It also adds the /bigobj compiler option.
  • co_await를 사용하도록 설정하기 위해 /await 컴파일러 옵션을 추가합니다.It adds the /await compiler option in order to enable co_await.
  • C++/WinRT codegen을 내보내도록 XAML 컴파일러에 지시합니다.It instructs the XAML compiler to emit C++/WinRT codegen.
  • 또한 표준을 준수하도록 코드를 추가로 제한하는 준수 모드: 예(/permissive-) 를 설정하려고 합니다.You might also want to set Conformance mode: Yes (/permissive-), which further constrains your code to be standards-compliant.
  • 알고 있어야 할 또 다른 프로젝트 속성은 C/C++ > 일반 > 경고를 오류로 처리입니다.Another project property to be aware of is C/C++ > General > Treat Warnings As Errors. 이 속성은 필요에 따라 예(/WX) 또는 아니요(/WX-) 로 설정하세요.Set this to Yes(/WX) or No (/WX-) to taste. 간혹 cppwinrt.exe 도구에서 생성된 소스 파일은 구현이 추가될 때까지 경고를 생성하는 경우가 있습니다.Sometimes, source files generated by the cppwinrt.exe tool generate warnings until you add your implementation to them.

위에서 설명한 대로 시스템을 설정하면 Visual Studio에서 C ++/WinRT 프로젝트를 만들고 빌드하거나 열고 배포할 수 있습니다.With your system set up as described above, you'll be able to create and build, or open, a C++/WinRT project in Visual Studio, and deploy it.

버전 2.0의 경우 Microsoft.Windows.CppWinRT NuGet 패키지에는 cppwinrt.exe 도구가 포함되어 있습니다.As of version 2.0, the Microsoft.Windows.CppWinRT NuGet package includes the cppwinrt.exe tool. C++/WinRT 코드에서의 사용을 위해 메타데이터에 설명된 API를 ‘프로젝션’하는 헤더 파일 기반 표준 C++ 라이브러리를 생성하기 위해 Windows 런타임 메타데이터(.winmd) 파일을 cppwinrt.exe 도구로 가리킬 수 있습니다. You can point the cppwinrt.exe tool at a Windows Runtime metadata (.winmd) file to generate a header-file-based standard C++ library that projects the APIs described in the metadata for consumption from C++/WinRT code. Windows 런타임 메타데이터(.winmd) 파일을 사용하면 Windows 런타임 API 표면을 정규화하여 설명할 수 있습니다.Windows Runtime metadata (.winmd) files provide a canonical way of describing a Windows Runtime API surface. 메타데이터에서 cppwinrt.exe를 가리켜 협력사 또는 타사 Windows 런타임 구성 요소에서 구현되거나 자체 애플리케이션에서 구현된 모든 런타임 클래스와 함께 사용할 라이브러리를 생성할 수 있습니다.By pointing cppwinrt.exe at metadata, you can generate a library for use with any runtime class implemented in a second- or third-party Windows Runtime component, or implemented in your own application. 자세한 내용은 C++/WinRT를 통한 API 사용을 참조하세요.For more info, see Consume APIs with C++/WinRT.

C++/WinRT로 COM 스타일 프로그래밍을 이용하지 않고도 자체 표준 C++를 사용하여 런타임 클래스를 구현할 수도 있습니다.With C++/WinRT, you can also implement your own runtime classes using standard C++, without resorting to COM-style programming. 런타임 클래스의 경우 IDL 파일에 형식만 설명하면 midl.execppwinrt.exe가 상용구 원본 코드 파일 구현을 생성합니다.For a runtime class, you just describe your types in an IDL file, and midl.exe and cppwinrt.exe generate your implementation boilerplate source code files for you. 또는 C++/WinRT 기본 클래스에서 파생하여 인터페이스를 구현할 수도 있습니다.You can alternatively just implement interfaces by deriving from a C++/WinRT base class. 자세한 내용은 C++/WinRT를 통한 API 작성을 참조하세요.For more info, see Author APIs with C++/WinRT.

프로젝트 속성을 통해 설정된 cppwinrt.exe 도구에 대한 사용자 지정 옵션 목록은 Microsoft.Windows.CppWinRT NuGet 패키지 추가 정보를 참조하세요.For a list of customization options for the cppwinrt.exe tool, set via project properties, see the Microsoft.Windows.CppWinRT NuGet package readme.

프로젝트에 설치된 Microsoft.Windows.CppWinRT NuGet 패키지가 있는 경우 C++/WinRT MSBuild 지원을 사용하는 프로젝트를 식별할 수 있습니다.You can identify a project that uses the C++/WinRT MSBuild support by the presence of the Microsoft.Windows.CppWinRT NuGet package installed within the project.

VSIX 확장에서 제공되는 Visual Studio 프로젝트 템플릿은 다음과 같습니다.Here are the Visual Studio project templates provided by the VSIX extension.

비어 있는 앱(C++/WinRT)Blank App (C++/WinRT)

XAML 사용자 인터페이스가 있는 UWP(유니버설 Windows 플랫폼) 앱용 프로젝트 템플릿입니다.A project template for a Universal Windows Platform (UWP) app that has a XAML user-interface.

Visual Studio는 각 XAML 태그 파일 뒤에 있는 IDL(Interface Definition Language)(.idl) 파일에서 구현과 헤더 스텁을 생성할 목적으로 XAML 컴파일러를 지원합니다.Visual Studio provides XAML compiler support to generate implementation and header stubs from the Interface Definition Language (IDL) (.idl) file that sits behind each XAML markup file. 먼저 IDL 파일에서 앱의 XAML 페이지에서 참조할 로컬 런타임 클래스를 모두 정의한 후 프로젝트를 한 번 빌드하여 구현 템플릿을 Generated Files에서 생성하고 스텁 형식 정의를 Generated Files\sources에서 생성합니다.In an IDL file, define any local runtime classes that you want to reference in your app's XAML pages, and then build the project once to generate implementation templates in Generated Files, and stub type definitions in Generated Files\sources. 그런 다음, 이러한 스텁 형식 정의를 참조에 사용하여 로컬 런타임 클래스를 구현합니다.Then use those stub type definitions for reference to implement your local runtime classes. 런타임 클래스를 Midl 파일(.idl)로 팩터링을 참조하세요.See Factoring runtime classes into Midl files (.idl).

C++/WinRT에 대한 Visual Studio 2019의 XAML 디자인 화면은 C#의 패리티에 가깝습니다.The XAML design surface support in Visual Studio 2019 for C++/WinRT is close to parity with C#. Visual Studio 2019에서 속성 창의 이벤트 탭을 사용하여 C++/WinRT 프로젝트에 이벤트 처리기를 추가할 수 있습니다.In Visual Studio 2019, you can use the Events tab of the Properties window to add event handlers within a C++/WinRT project. 수동으로 코드에 이벤트 처리기를 추가할 수도 있습니다. 자세한 내용은 C++/WinRT에서 대리자를 사용하여 이벤트 처리를 참조하세요.You can also add event handlers to your code manually—see Handle events by using delegates in C++/WinRT for more info.

주요 앱(C++/WinRT)Core App (C++/WinRT)

XAML을 사용하지 않는 UWP(유니버설 Windows 플랫폼) 앱용 프로젝트 템플릿입니다.A project template for a Universal Windows Platform (UWP) app that doesn't use XAML.

대신 C++/WinRT Windows 네임스페이스 헤더를 Windows.ApplicationModel.Core 네임스페이스에 사용합니다.Instead, it uses the C++/WinRT Windows namespace header for the Windows.ApplicationModel.Core namespace. 빌드와 실행까지 마친 후 빈 공간을 클릭하여 색이 지정된 사각형을 추가한 다음, 색이 지정된 사각형을 클릭하여 끌어옵니다.After building and running, click on an empty space to add a colored square; then click on a colored square to drag it.

Windows 콘솔 애플리케이션(C++/WinRT)Windows Console Application (C++/WinRT)

콘솔 사용자 인터페이스가 포함된 Windows 데스크톱의 C++/WinRT 클라이언트 애플리케이션용 프로젝트 템플릿입니다.A project template for a C++/WinRT client application for Windows Desktop, with a console user-interface.

Windows 데스크톱 애플리케이션(C++/WinRT)Windows Desktop Application (C++/WinRT)

Windows 데스크톱의 C++/WinRT 클라이언트 애플리케이션용 프로젝트 템플릿입니다. 여기에는 Win32 MessageBox 내의 Windows 런타임 Windows.Foundation.Uri가 표시됩니다.A project template for a C++/WinRT client application for Windows Desktop, which displays a Windows Runtime Windows.Foundation.Uri inside a Win32 MessageBox.

Windows 런타임 구성 요소(C++/WinRT)Windows Runtime Component (C++/WinRT)

일반적으로 UWP(유니버설 Windows 플랫폼)에서 사용되는 구성 요소용 프로젝트 템플릿입니다.A project template for a component; typically for consumption from a Universal Windows Platform (UWP).

이 템플릿은 midl.exe > cppwinrt.exe 도구 체인을 나타냅니다. 이 경우 Windows 런타임 메타데이터(.winmd)가 IDL에서 생성된 다음, 구현과 헤더 스텁이 Windows 런타임 메타데이터에서 생성됩니다.This template demonstrates the midl.exe > cppwinrt.exe toolchain, where Windows Runtime metadata (.winmd) is generated from IDL, and then implementation and header stubs are generated from the Windows Runtime metadata.

IDL 파일에서 구성 요소의 런타임 클래스와 기본 인터페이스, 그리고 그 밖에 구현되는 인터페이스를 정의합니다.In an IDL file, define the runtime classes in your component, their default interface, and any other interfaces they implement. 프로젝트를 1회 빌드하여 module.g.cpp, module.h.cpp, Generated Files의 구현 템플릿 및 Generated Files\sources의 스텁 형식 정의를 생성합니다.Build the project once to generate module.g.cpp, module.h.cpp, implementation templates in Generated Files, and stub type definitions in Generated Files\sources. 그런 다음, 생성된 스텁 형식 정의를 참조에 사용하여 구성 요소의 런타임 클래스를 구현합니다.Then use those the stub type definitions for reference to implement the runtime classes in your component. 런타임 클래스를 Midl 파일(.idl)로 팩터링을 참조하세요.See Factoring runtime classes into Midl files (.idl).

빌드된 Windows 런타임 구성 요소 이진 파일 및 이진 파일의 .winmd와 함께 이 두 항목을 사용하는 UWP 앱을 번들로 제공합니다.Bundle the built Windows Runtime component binary and its .winmd with the UWP app consuming them.

이전 버전의 VSIX 확장Earlier versions of the VSIX extension

VSIX 확장의 최신 버전을 설치하거나 이 버전으로 업데이트하는 것이 좋습니다.We recommend that you install (or update to) the latest version of the VSIX extension. 기본적으로 이 확장은 자동으로 업데이트되도록 구성됩니다.It is configured to update itself by default. 1.0.190128.4보다 이전 버전의 VSIX 확장을 사용하여 만든 프로젝트가 있을 때 이 작업을 수행하는 경우, 이 섹션에서는 해당 프로젝트가 새 버전에서 작동하도록 업그레이드하는 방법에 대한 중요한 정보를 제공합니다.If you do that, and you have projects that were created with a version of the VSIX extension earlier than 1.0.190128.4, then this section contains important info about upgrading those projects to work with the new version. 업데이트하지 않는 경우에도 이 섹션의 정보가 유용하다는 것을 알게 됩니다.If you don't update, then you'll still find the info in this section useful.

지원되는 Windows SDK 및 Visual Studio 버전과 Visual Studio 구성의 측면에서 위의 C++/WinRT, XAML, VSIX 확장 및 NuGet 패키지에 대한 Visual Studio 지원 섹션에 있는 정보는 이전 버전의 VSIX 확장에 적용됩니다.In terms of supported Windows SDK and Visual Studio versions, and Visual Studio configuration, the info in the Visual Studio support for C++/WinRT, XAML, the VSIX extension, and the NuGet package section above applies to earlier versions of the VSIX extension. 아래 정보는 이전 버전을 사용하여 만들거나 이전 버전에서 작동하도록 업그레이드된 프로젝트의 동작 및 구성에 관한 중요한 차이점을 설명합니다.The info below describes important differences regarding the behavior and configuration of projects created with (or upgraded to work with) earlier versions.

1.0.181002.2보다 이전에 생성됨Created earlier than 1.0.181002.2

프로젝트가 1.0.181002.2보다 이전 버전의 VSIX 확장을 사용하여 생성된 경우에는 VSIX 확장 버전에 C++/WinRT 빌드 지원이 기본적으로 제공됩니다.If your project was created with a version of the VSIX extension earlier than 1.0.181002.2, then C++/WinRT build support was built into that version of the VSIX extension. 프로젝트의 <CppWinRTEnabled>true</CppWinRTEnabled> 속성이 .vcxproj 파일에 설정되어 있습니다.Your project has the <CppWinRTEnabled>true</CppWinRTEnabled> property set in the .vcxproj file.

<Project ...>
    <PropertyGroup Label="Globals">
        <CppWinRTEnabled>true</CppWinRTEnabled>
...

Microsoft.Windows.CppWinRT NuGet 패키지를 수동으로 설치하여 프로젝트를 업그레이드할 수 있습니다.You can upgrade your project by manually installing the Microsoft.Windows.CppWinRT NuGet package. 최신 버전 VSIX 확장을 설치하거나 이 버전으로 업그레이드한 후 Visual Studio에서 프로젝트를 열고, 프로젝트 > NuGet 패키지 관리... > 찾아보기를 클릭하고, 검색 상자에 Microsoft.Windows.CppWinRT를 입력하거나 붙여넣고, 검색 결과에서 항목을 선택한 다음, 설치를 클릭하여 해당 프로젝트용 패키지를 설치합니다.After installing (or upgrading to) the latest version of the VSIX extension, open your project in Visual Studio, click Project > Manage NuGet Packages... > Browse, type or paste Microsoft.Windows.CppWinRT in the search box, select the item in search results, and then click Install to install the package for your project.

1.0.181002.2-1.0.190128.3 버전으로 생성되거나 해당 버전으로 업그레이드됨Created with (or upgraded to) between 1.0.181002.2 and 1.0.190128.3

프로젝트가 1.0.181002.2-1.0.190128.3(포함) VSIX 확장 버전을 사용하여 생성된 경우 Microsoft.Windows.CppWinRT NuGet 패키지는 프로젝트 템플릿을 통해 자동으로 프로젝트에 설치되었습니다.If your project was created with a version of the VSIX extension between 1.0.181002.2 and 1.0.190128.3, inclusive, then the Microsoft.Windows.CppWinRT NuGet package was installed in the project automatically by the project template. 이 범위에 있는 VSIX 확장 버전을 사용하도록 이전 프로젝트를 업그레이드했을 수도 있습니다.You might also have upgraded an older project to use a version of the VSIX extension in this range. 이 경우 이 범위의 VSIX 확장 버전에 빌드 지원이 계속 포함되므로 업그레이드된 프로젝트에는 Microsoft.Windows.CppWinRT NuGet 패키지가 설치되거나 설치되지 않았을 수 있습니다.If you did, then—since build support was also still present in versions of the VSIX extension in this range—your upgraded project may or may not have the Microsoft.Windows.CppWinRT NuGet package installed.

프로젝트를 업그레이드하려면 이전 섹션의 지침에 따라 프로젝트에 Microsoft.Windows.CppWinRT NuGet 패키지가 설치되어 있는지 확인합니다.To upgrade your project, follow the instructions in the previous section and ensure that your project does have the Microsoft.Windows.CppWinRT NuGet package installed.

잘못된 업그레이드 구성Invalid upgrade configurations

최신 버전의 VSIX 확장을 사용하는 경우 프로젝트에 Microsoft.Windows.CppWinRT NuGet 패키지가 설치되어 있지 않으면 프로젝트에 <CppWinRTEnabled>true</CppWinRTEnabled> 속성이 포함될 수 없습니다.With the latest version of the VSIX extension, it's not valid for a project to have the <CppWinRTEnabled>true</CppWinRTEnabled> property if it doesn't also have the Microsoft.Windows.CppWinRT NuGet package installed. 이 구성을 사용하는 프로젝트에서 빌드 오류 메시지 “C++/WinRT VSIX에서 더 이상 프로젝트 빌드 지원을 제공하지 않습니다.A project with this configuration produces the build error message, "The C++/WinRT VSIX no longer provides project build support. Microsoft.Windows.CppWinRT NuGet 패키지에 프로젝트 참조를 추가하세요.”를 생성합니다.Please add a project reference to the Microsoft.Windows.CppWinRT Nuget package."

위에서 언급한 대로 C++/WinRT 프로젝트에는 NuGet 패키지가 설치되어 있어야 합니다.As mentioned above, a C++/WinRT project now needs to have the NuGet package installed in it.

이제 <CppWinRTEnabled> 요소는 사용되지 않으므로 선택적으로 .vcxproj를 편집하고 요소를 삭제할 수 있습니다.Since the <CppWinRTEnabled> element is now obsolete, you can optionally edit your .vcxproj, and delete the element. 반드시 필요한 것이 아니라 옵션입니다.It's not strictly necessary, but it's an option.

또한 .vcxproj<RequiredBundles>$(RequiredBundles);Microsoft.Windows.CppWinRT</RequiredBundles>가 포함되어 있는 경우 C++/WinRT VSIX 확장을 설치하지 않고도 빌드할 수 있도록 제거할 수 있습니다.Also, if your .vcxproj contains <RequiredBundles>$(RequiredBundles);Microsoft.Windows.CppWinRT</RequiredBundles>, then you can remove it so that you can build without requiring the C++/WinRT VSIX extension to be installed.

C++/WinRT에 대한 SDK 지원SDK support for C++/WinRT

이 지원은 이제 호환성을 위해서만 제공되지만 버전 10.0.17134.0(Windows 10 버전 1803)을 기준으로 Windows SDK는 자사 Windows API(Windows 네임스페이스의 Windows 런타임 API)를 사용하기 위한 헤더 파일 기반 표준 C++ 라이브러리를 포함합니다.Although it is now present only for compatibility reasons, as of version 10.0.17134.0 (Windows 10, version 1803), the Windows SDK contains a header-file-based standard C++ library for consuming first-party Windows APIs (Windows Runtime APIs in Windows namespaces). 해당 헤더는 %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt 폴더에 있습니다.Those headers are inside the folder %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt. Windows SDK 버전 10.0.17763.0(Windows 10 버전 1809)에서는 이 헤더가 프로젝트의 $(GeneratedFilesDir) 폴더에 생성됩니다.As of the Windows SDK version 10.0.17763.0 (Windows 10, version 1809), these headers are generated for you inside your project's $(GeneratedFilesDir) folder.

호환성을 위해 Windows SDK도 cppwinrt.exe 도구와 함께 제공됩니다.Again for compatibility, the Windows SDK also comes with the cppwinrt.exe tool. 그러나 Microsoft.Windows.CppWinRT NuGet 패키지에 포함된 최신 버전의 cppwinrt.exe를 설치하고 사용하는 것이 좋습니다.However, we recommend that you instead install and use the most recent version of cppwinrt.exe, which is included with the Microsoft.Windows.CppWinRT NuGet package. 해당 패키지와 cppwinrt.exe는 위의 섹션에서 설명합니다.That package, and cppwinrt.exe, are described in the sections above.

C++/WinRT 프로젝션의 사용자 지정 형식Custom types in the C++/WinRT projection

C++/WinRT 프로그래밍에서 일부 C++ 표준 라이브러리 데이터 형식을 포함한 표준 C++ 언어 기능과 표준 C++ 데이터 형식 및 C++/WinRT를 사용할 수 있습니다.In your C++/WinRT programming, you can use standard C++ language features and Standard C++ data types and C++/WinRT—including some C++ Standard Library data types. 그 밖에도 프로젝션에서 일부 사용자 지정 데이터 형식에 대해서도 알아둘 필요가 있으며, 실제로 사용자 지정 데이터 형식을 사용할 수도 있습니다.But you'll also become aware of some custom data types in the projection, and you can choose to use them. 예를 들어 C++/WinRT 시작의 빠른 시작 코드 예제에서 winrt::hstring을 사용합니다.For example, we use winrt::hstring in the quick-start code example in Get started with C++/WinRT.

winrt::com_array는 임의 시점에서 사용할 가능성이 높은 또 하나의 형식입니다.winrt::com_array is another type that you're likely to use at some point. 하지만 winrt::array_view 같은 형식은 직접 사용할 가능성이 비교적 낮습니다.But you're less likely to directly use a type such as winrt::array_view. 혹은 사용하지 않도록 선택할 수도 있는데, 이때는 C++ 표준 라이브러리에 해당하는 형식이 표시되더라도 어떤 코드도 변경할 필요가 없습니다.Or you may choose not to use it so that you won't have any code to change if and when an equivalent type appears in the C++ Standard Library.

경고

그 밖에 C++/WinRT Windows 네임스페이스 헤더에 대해서 자세히 공부할 경우 마주칠 수 있는 형식들도 있습니다.There are also types that you might see if you closely study the C++/WinRT Windows namespace headers. 예제로는 winrt::param::hstring이 있지만 컬렉션 예제도 있습니다.An example is winrt::param::hstring, but there are collection examples too. 이는 오로지 입력 매개 변수의 바인딩을 최적화하기 위해서만 존재하며 크게 성능을 향상하고 관련 표준 C++ 형식 및 컨테이너를 위해 “단지 작동”하는 호출 패턴을 최대한 활용합니다.These exist solely to optimize the binding of input parameters, and they yield big performance improvements and make most calling patterns "just work" for related standard C++ types and containers. 이 형식은 대부분의 값을 추가하는 경우에 프로젝션에 의해서만 사용됩니다.These types are only ever used by the projection in cases where they add most value. 우수하게 최적화되었으며 일반적인 용도로 사용되지 않습니다. 직접 사용하려고 하지 마세요.They're highly optimized and they're not for general use; don't be tempted to use them yourself. 이 형식은 구현 형식이며 변경되기 쉬우므로 winrt::impl 네임스페이스에서 어떤 것도 사용해서는 안 됩니다.Nor should you use anything from the winrt::impl namespace, since those are implementation types, and therefore subject to change. 표준 형식이나 winrt 네임스페이스의 형식을 계속 사용해야 합니다.You should continue to use standard types, or types from the winrt namespace.

매개 변수를 ABI 경계로 전달도 참조하세요.Also see Passing parameters into the ABI boundary.

중요 APIImportant APIs