C++/WinRTC++/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는 아름답고 빠른 Windows용 코드를 작성하는 데 관심이 있는 모든 개발자에게 적합합니다.C++/WinRT is for any developer interested in writing beautiful and fast code for Windows. 그 이유는 다음과 같습니다.Here's why.

C++/WinRT의 경우The case for C++/WinRT

 

C++ 프로그래밍 언어는 엔터프라이즈 및 ISV(Independent Software Vendor) 부문 모두에서 높은 수준의 정확성, 품질 및 성능이 가치가 있는 애플리케이션에 사용합니다.The C++ programming language is used both in the enterprise and independent software vendor (ISV) segments for applications where high levels of correctness, quality, and performance are valued. 예를 들어 시스템 프로그래밍, 리소스가 제한된 포함 및 모바일 시스템, 게임 및 그래픽, 디바이스 드라이버, 산업/과학/의학 애플리케이션 등이 있습니다.For example: systems programming; resource-constrained embedded and mobile systems; games and graphics; device drivers; and industrial, scientific, and medical applications, to name but some.

언어적 관점에서 C++는 항상 형식이 풍부하고 가벼운 추상화를 작성하고 사용하는 것에 관련되어 있습니다.From a language point of view, C++ has always been about authoring and consuming abstractions that are both type-rich and lightweight. 하지만 원시 포인터, 원시 루프 및 C++98의 까다로운 메모리 할당 및 해제 이후로 언어가 급격하게 바뀌었습니다.But the language has changed radically since the raw pointers, raw loops, and painstaking memory allocation and releasing of C++98. 최신 C++(C++11 이후)는 아이디어, 단순성, 가독성 및 버그 발생에 대한 훨씬 낮은 가능성을 명확하게 표현하고 있습니다.Modern C++ (from C++11 onward) is about clear expression of ideas, simplicity, readability, and a much lower likelihood of introducing bugs.

C++를 사용하여 Windows 런타임 API를 작성하고 사용하는 경우 C++/WinRT가 있습니다.For authoring and consuming Windows Runtime APIs using C++, there is C++/WinRT. 이는 Microsoft에서 추천하는 C++/CX 언어 프로젝션 및 Windows 런타임 C++ 템플릿 라이브러리(WRL)용 대체 언어입니다.This is Microsoft's recommended replacement for the C++/CX language projection, and the Windows Runtime C++ Template Library (WRL).

C++/WinRT를 사용하는 경우 표준 C++ 데이터 형식, 알고리즘 및 키워드가 사용됩니다.You use standard C++ data types, algorithms, and keywords when you use C++/WinRT. 프로젝션에는 자체의 사용자 지정 데이터 형식이 있지만, 대부분의 경우 표준 형식과 적절히 변환할 수 있으므로 해당 데이터 형식에 대해 자세히 알고 있을 필요가 없습니다.The projection does have its own custom data types, but in most cases you don't need to learn them because they provide appropriate conversions to and from standard types. 또한 사용하는 데 익숙한 표준 C++ 언어 기능과 이미 갖고 있는 소스 코드를 계속 사용할 수 있습니다.That way, you can continue to use the standard C++ language features that you're accustomed to using, and the source code that you already have. Win32에서 UWP까지에 이르는 모든 C++ 애플리케이션에서 C++/WinRT를 통해 Windows 런타임 API를 매우 쉽게 호출할 수 있습니다.C++/WinRT makes it extremely easy to call Windows Runtime APIs in any C++ application, from Win32 to UWP.

C++/WinRT는 Windows 런타임에 사용되는 다른 언어 옵션보다 성능이 뛰어나고 더 작은 이진 파일을 생성합니다.C++/WinRT performs better and produces smaller binaries than any other language option for the Windows Runtime. 심지어 ABI 인터페이스를 직접 사용하여 작성한 코드보다도 우수합니다.It even outperforms handwritten code using the ABI interfaces directly. 이는 추상화에서 Visual C++ 컴파일러가 최적화하도록 설계된 최신 C++ 관용구를 사용하기 때문입니다.That's because the abstractions use modern C++ idioms that the Visual C++ compiler is designed to optimize. 여기에는 매직 정적, 빈 기본 클래스, strlen 생략뿐만 아니라 특히 C++/WinRT의 성능 향상을 목표로 하는 최신 버전의 Visual C++에서 제공하는 다수의 최신 최적화가 포함됩니다.This includes magic statics, empty base classes, strlen elision, as well as many newer optimizations in the latest version of Visual C++ targeted specifically at improving the performance of C++/WinRT.

C++/WinRT 관련 항목Topics about C++/WinRT

항목Topic 설명Description
C++/WinRT 소개Introduction to C++/WinRT Windows 런타임 API용 표준 C++ 언어 프로젝션인 C++/WinRT에 대한 소개입니다.An introduction to C++/WinRT—a standard C++ language projection for Windows Runtime APIs.
C++/WinRT 시작Get started with C++/WinRT C++/WinRT 사용 속도를 높이려면 이 항목에서 안내하는 단순한 코드 예제를 살펴봅니다.To get you up to speed with using C++/WinRT, this topic walks through a simple code example.
C++/WinRT의 새로운 기능What's new in C++/WinRT C++/WinRT에서 새롭거나 변경된 기능입니다.News and changes to C++/WinRT.
질문과 대답Frequently-asked questions C++/WinRT를 통해 Windows 런타임 API를 작성하거나 사용하는 것과 관련하여 발생할 수 있는 질문에 대한 대답입니다.Answers to questions that you're likely to have about authoring and consuming Windows Runtime APIs with C++/WinRT.
문제 해결Troubleshooting 이 항목에 나와 있는 문제 증상 및 해결 방법에 대한 표는 새 코드를 자르거나 기존 앱을 이식할지를 결정하는 데 도움이 될 수 있습니다.The table of troubleshooting symptoms and remedies in this topic may be helpful to you whether you're cutting new code or porting an existing app.
Photo Editor C++/WinRT 샘플 애플리케이션Photo Editor C++/WinRT sample application Photo Editor는 C++/WinRT 언어 프로젝션을 통한 개발을 보여 주는 UWP 샘플 애플리케이션입니다.Photo Editor is a UWP sample application that showcases development with the C++/WinRT language projection. 샘플 애플리케이션을 사용하면 사진 라이브러리에서 사진을 검색한 다음, 다양한 사진 효과를 사용하여 선택한 이미지를 편집할 수 있습니다.The sample application allows you to retrieve photos from the Pictures library, and then edit the selected image with assorted photo effects.
문자열 처리String handling C++/WinRT를 사용하면 표준 C++ 와이드 문자열 형식을 사용하여 Windows 런타임 API를 호출하거나, winrt::hstring 형식을 사용할 수 있습니다.With C++/WinRT, you can call Windows Runtime APIs using standard C++ wide string types, or you can use the winrt::hstring type.
표준 C++ 데이터 형식 및 C++/WinRTStandard C++ data types and C++/WinRT C++/WinRT를 사용하면 표준 C++ 데이터 형식을 사용하여 Windows 런타임 API를 호출할 수 있습니다.With C++/WinRT, you can call Windows Runtime APIs using Standard C++ data types.
스칼라 값을 IInspectable로 boxing 및 unboxingBoxing and unboxing scalar values to IInspectable 스칼라 값은 IInspectable이 필요한 함수에 전달되기 전에 참조 클래스 개체 내에 래핑되어야 합니다.A scalar value needs to be wrapped inside a reference class object before being passed to a function that expects IInspectable. 이 래핑 프로세스에 대해 값을 boxing한다고 합니다.That wrapping process is known as boxing the value.
C++/WinRT를 통한 API 사용Consume APIs with C++/WinRT Windows, 타사 구성 요소 공급업체 또는 사용자 자신이 구현하는지 여부에 관계없이 C++/WinRT API를 사용하는 방법을 보여 줍니다.This topic shows how to consume C++/WinRT APIs, whether they're implemented by Windows, a third-party component vendor, or by yourself.
C++/WinRT를 통한 API 작성Author APIs with C++/WinRT winrt::implements 기본 구조체를 직접 또는 간접적으로 사용하여 C++/WinRT API를 작성하는 방법을 보여 줍니다.This topic shows how to author C++/WinRT APIs by using the winrt::implements base struct, either directly or indirectly.
C++/WinRT를 통한 오류 처리Error handling with C++/WinRT C++/WinRT를 사용하여 프로그래밍할 때 오류를 처리하기 위한 전략에 대해 설명합니다.This topic discusses strategies for handling errors when programming with C++/WinRT.
대리자를 통한 이벤트 처리Handle events by using delegates C++/WinRT를 사용하여 이벤트 처리 대리자를 등록하거나 취소하는 방법을 보여 줍니다.This topic shows how to register and revoke event-handling delegates using C++/WinRT.
이벤트 작성Author events 이벤트를 발생시키는 런타임 클래스가 포함된 Windows 런타임 구성 요소를 작성하는 방법을 보여 줍니다.This topic demonstrates how to author a Windows Runtime component containing a runtime class that raises events. 또한 구성 요소를 사용하고 이벤트를 처리하는 앱도 보여 줍니다.It also demonstrates an app that consumes the component and handles the events.
C++/WinRT로 작성된 컬렉션Collections with C++/WinRT C++/WinRT는 컬렉션을 구현하거나 전달하려는 경우 많은 시간과 노력을 절약할 수 있는 함수와 기본 클래스를 제공합니다.C++/WinRT provides functions and base classes that save you a lot of time and effort when you want to implement and/or pass collections.
동시성 및 비동기 작업Concurrency and asynchronous operations C++/WinRT를 사용하여 Windows 런타임 비동기 개체를 만들고 사용하는 방법을 보여 줍니다.This topic shows the ways in which you can both create and consume Windows Runtime asynchronous objects with C++/WinRT.
한층 향상한 동시성, 비동기 프로그래밍 기능More advanced concurrency and asynchrony C++/WinRT로 동시성, 비동기 작업을 모두 수행하는 고급 시나리오.More advanced scenarios with concurrency and asynchrony in C++/WinRT.
XAML 컨트롤(C++/WinRT 속성에 바인딩)XAML controls; bind to a C++/WinRT property XAML 컨트롤에 효과적으로 바인딩할 수 있는 속성은 식별할 수 있는(observable) 속성이라고 합니다.A property that can be effectively bound to a XAML control is known as an observable property. 이 항목에서는 식별할 수 있는 속성을 구현하고 사용하는 방법과 XAML 컨트롤에 바인딩하는 방법을 보여 줍니다.This topic shows how to implement and consume an observable property, and how to bind a XAML control to it.
XAML 항목 컨트롤(C++/WinRT 컬렉션에 바인딩)XAML items controls; bind to a C++/WinRT collection XAML 항목에 효과적으로 바인딩할 수 있는 컬렉션은 식별할 수 있는(observable) 컬렉션이라고 합니다.A collection that can be effectively bound to a XAML items control is known as an observable collection. 이 항목에서는 식별할 수 있는 컬렉션을 구현하고 사용하는 방법과 XAML 항목에 바인딩하는 방법을 보여 줍니다.This topic shows how to implement and consume an observable collection, and how to bind a XAML items control to it.
C++/WinRT를 사용한 XAML 사용자 지정(템플릿 기반) 컨트롤XAML custom (templated) controls with C++/WinRT C++/WinRT를 사용하여 간단한 사용자 지정 컨트롤을 만드는 단계를 안내합니다.This topic walks you through the steps of creating a simple custom control using C++/WinRT. 여기에 나와 있는 정보에 따라 기능이 풍부하고 사용자 지정 가능한 UI 컨트롤을 만들 수 있습니다.You can build on the info here to create your own feature-rich and customizable UI controls.
매개 변수를 ABI 경계로 전달Passing parameters into the ABI boundary C++/WinRT는 일반적인 경우에 대한 자동 변환을 제공하여 매개 변수를 ABI 경계에 전달하는 것을 단순화합니다.C++/WinRT simplifies passing parameters into the ABI boundary by providing automatic conversions for common cases.
C++/WinRT를 통한 COM 구성 요소 사용Consume COM components with C++/WinRT 전체 Direct2D 코드 예제를 사용하여 C++/WinRT를 통해 COM 클래스 및 인터페이스를 사용하는 방법을 보여 줍니다.This topic uses a full Direct2D code example to show how to use C++/WinRT to consume COM classes and interfaces.
C++/WinRT를 통한 COM 구성 요소 작성Author COM components with C++/WinRT C++/WinRT는 Windows 런타임 클래스를 작성하는 데 도움이 되는 것처럼 클래식 COM 구성 요소를 작성하는 데도 도움이 됩니다.C++/WinRT can help you to author classic COM components, just as it helps you to author Windows Runtime classes.
C++/CX에서 C++/WinRT로 이동Move to C++/WinRT from C++/CX C++/CX 코드를 C++/WinRT의 해당 코드로 이동하는 방법을 보여 줍니다.This topic shows how to port C++/CX code to its equivalent in C++/WinRT.
C++/WinRT와 C++/CX 간의 상호 운용성Interop between C++/WinRT and C++/CX C++/CX 개체와 C++/WinRT 개체 간에 변환하는 데 사용할 수 있는 두 가지 도우미 함수를 보여 줍니다.This topic shows two helper functions that can be used to convert between C++/CX and C++/WinRT objects.
WRL에서 C++/WinRT로 이동Move to C++/WinRT from WRL Windows 런타임 C++ 템플릿 라이브러리(WRL) 코드를 C++/WinRT의 해당 코드로 이동하는 방법을 보여 줍니다.This topic shows how to port Windows Runtime C++ Template Library (WRL) code to its equivalent in C++/WinRT.
C#에서 C++/WinRT로 이동Move to C++/WinRT from C# C# 코드를 C++/WinRT의 해당 코드로 포팅하는 방법을 보여 줍니다.This topic shows how to port C# code to its equivalent in C++/WinRT.
C++/WinRT와 ABI 사이의 상호 운용성Interop between C++/WinRT and the ABI ABI(애플리케이션 이진 인터페이스)와 C++/WinRT 개체 간에 변환하는 방법을 보여 줍니다.This topic shows how to convert between application binary interface (ABI) and C++/WinRT objects.
C++/WinRT의 강력하고 약한 참조Strong and weak references in C++/WinRT Windows 런타임은 참조 계산 시스템입니다. 이러한 시스템에서는 강한 참조와 약한 참조의 중요성과 차이점을 인식해야 합니다.The Windows Runtime is a reference-counted system; and in such a system it's important for you to know about the significance of, and distinction between, strong and weak references.
Agile 개체Agile objects Agile 개체는 모든 스레드에서 액세스할 수 있는 개체입니다.An agile object is one that can be accessed from any thread. C++/WinRT 형식은 기본적으로 Agile이지만 옵트아웃할 수 있습니다.Your C++/WinRT types are agile by default, but you can opt out.
직접 할당 진단Diagnosing direct allocations 필요에 따라 winrt::make 도우미 제품군을 사용하는 대신 스택에서 구현 유형의 개체를 만드는 오류를 진단하는 데 도움이 되는 C++/WinRT 2.0 기능에 대해 자세히 설명합니다.This topic goes in-depth on a C++/WinRT 2.0 feature that helps you diagnose the mistake of creating an object of implementation type on the stack, rather than using the winrt::make family of helpers, as you should.
구현 형식에 대한 확장 지점Extension points for your implementation types C++/WinRT 2.0의 이러한 확장 지점을 사용하면 구현 형식의 소멸을 지연하고, 소멸 중에 안전하게 쿼리하고, 프로젝션 메서드에서 항목을 연결하거나 종료할 수 있습니다.These extension points in C++/WinRT 2.0 allow you to defer destruction of your implementation types, to safely query during destruction, and to hook the entry into and exit from your projected methods.
간단한 C++/WinRT Windows UI 라이브러리 예제A simple C++/WinRT Windows UI Library example C++/WinRT 프로젝트 내에서 WinUI를 위해 간단한 지원을 추가하는 과정을 안내합니다.This topic walks you through the process of adding simple support for WinUI within a C++/WinRT project.

C++ 언어 관련 항목Topics about the C++ language

항목Topic 설명Description
값 범주 및 해당 참조Value categories, and references to them C++에 존재하는 값의 다양한 범주에 대해 설명합니다.This topic describes the various categories of values that exist in C++. 분명히 lvalues와 rvalues에 대해 들어 보았을 것이지만, 다른 종류도 있습니다.You will doubtless have heard of lvalues and rvalues, but there are other kinds, too.

중요 APIImportant APIs