Windows 런타임 C++ 템플릿 라이브러리(WRL)

WRL(Windows 런타임 C++ 템플릿 라이브러리)은 Windows 런타임 구성 요소를 만들고 사용하기 위한 간단한 방법을 제공하는 템플릿 라이브러리입니다.

참고 항목

WRL은 이제 Windows 런타임 API에 대한 표준 C++17 언어 프로젝션인 C++/WinRT로 대체됩니다. C++/WinRT는 버전 1803(10.0.17134.0)부터 Windows SDK에서 제공됩니다. C++/WinRT는 헤더 파일에서 전적으로 구현되며 최신 Windows API에 대한 일류 액세스를 제공하도록 설계되었습니다.

C++/WinRT를 사용하면 표준 준수 C++17 컴파일러를 사용하여 Windows 런타임 API를 사용하고 작성할 수 있습니다. C++/WinRT는 일반적으로 더 나은 성능을 발휘하며 Windows 런타임 다른 언어 옵션보다 작은 이진 파일을 생성합니다. C++/CX와 WRL도 계속 지원되지만, 새 애플리케이션에서는 C++/WinRT를 사용하는 것이 좋습니다. 자세한 내용은 C++/WinRT 참조하세요.

이점

Windows 런타임 C++ 템플릿 라이브러리를 사용하면 COM(구성 요소 개체 모델) 구성 요소를 보다 쉽게 구현하고 사용할 수 있습니다. 개체의 수명을 관리하는 참조 계산과 같은 하우스키핑 기술을 제공하고 HRESULT 값을 테스트하여 작업이 성공했는지 아니면 실패했는지를 확인합니다. Windows 런타임 C++ 템플릿 라이브러리를 성공적으로 사용하려면 이러한 규칙과 기술을 신중하게 따라야 합니다.

C++/CX는 Windows 런타임 구성 요소를 사용하는 높은 수준의 언어 기반 방법입니다. Windows 런타임 C++ 템플릿 라이브러리와 C++/CX는 사용자를 대신하여 하우스키핑 작업을 자동으로 수행하여 Windows 런타임 대한 코드 작성을 간소화합니다.

Windows 런타임 C++ 템플릿 라이브러리 및 C++/CX는 다양한 이점을 제공합니다. 다음은 C++/CX 대신 Windows 런타임 C++ 템플릿 라이브러리를 사용할 수 있는 몇 가지 이유입니다.

  • Windows 런타임 C++ 템플릿 라이브러리는 Windows 런타임 ABI(애플리케이션 이진 인터페이스)에 대한 추상화가 거의 추가되지 않고 기본 코드를 제어하여 Windows 런타임 API를 더 잘 만들거나 사용하는 기능을 제공합니다.

  • C++/CX는 COM HRESULT 값을 예외로 나타냅니다. COM을 사용하는 코드 베이스 또는 예외를 사용하지 않는 코드 베이스를 상속한 경우 예외를 사용할 필요가 없으므로 Windows 런타임 C++ 템플릿 라이브러리가 Windows 런타임 사용하는 보다 자연스러운 방법임을 알 수 있습니다.

    참고 항목

    Windows 런타임 C++ 템플릿 라이브러리는 HRESULT 값을 사용하며 예외를 throw하지 않습니다. 또한 Windows 런타임 C++ 템플릿 라이브러리는 스마트 포인터와 RAII 패턴을 사용하여 애플리케이션 코드에서 예외를 throw할 때 개체가 올바르게 제거되도록 보장합니다. 스마트 포인터 및 RAII 에 대한 자세한 내용은 SMART 포인터 및RAII(개체 소유 리소스)를 참조하세요.

  • Windows 런타임 C++ 템플릿 라이브러리의 목적과 디자인은 COM 개체의 프로그래밍을 간소화하는 템플릿 기반 C++ 클래스 집합인 ATL(Active Template Library)에서 영감을 받았습니다. Windows 런타임 C++ 템플릿 라이브러리는 표준 C++를 사용하여 Windows 런타임 래핑하므로 ATL로 작성된 많은 기존 COM 구성 요소를 Windows 런타임 보다 쉽게 포팅하고 상호 작용할 수 있습니다. ATL을 이미 알고 있는 경우 Windows 런타임 C++ 템플릿 라이브러리 프로그래밍이 더 쉬울 수 있습니다.

시작하기

다음은 Windows 런타임 C++ 템플릿 라이브러리를 즉시 사용하는 데 도움이 되는 몇 가지 리소스입니다.

방법: Windows 런타임 구성 요소 활성화 및 사용
Windows 런타임 C++ 템플릿 라이브러리를 사용하여 Windows 런타임 초기화하고 Windows 런타임 구성 요소를 활성화하고 사용하는 방법을 보여줍니다.

방법: 비동기 작업 완료
Windows 런타임 C++ 템플릿 라이브러리를 사용하여 비동기 작업을 시작하고 작업이 완료되면 작업을 수행하는 방법을 보여 줍니다.

방법: 이벤트 처리
Windows 런타임 C++ 템플릿 라이브러리를 사용하여 Windows 런타임 개체의 이벤트를 구독하고 처리하는 방법을 보여 줍니다.

연습: WRL 및 미디어 파운데이션을 사용하여 UWP 앱 만들기
Microsoft Media Foundation을 사용하는 UWP 앱을 만드는 방법을 알아봅니다.

방법: 클래식 COM 구성 요소 만들기
Windows 런타임 C++ 템플릿 라이브러리를 사용하여 기본 COM 구성 요소를 만드는 방법 및 데스크톱 앱에서 COM 구성 요소를 등록하고 사용하는 기본 방법을 보여줍니다.

방법: 직접 WRL 구성 요소 인스턴스화
Microsoft::WRL::MakeMicrosoft::WRL::Details::MakeAndInitialize 함수를 사용하여 구성 요소를 정의하는 모듈의 구성 요소를 인스턴스화하는 방법을 알아봅니다.

방법: winmdidl.exe 및 midlrt.exe를 사용하여 Windows 메타데이터에서 .h 파일 만들기
.winmd 메타데이터에서 IDL 파일을 만들어 WRL의 사용자 지정 Windows 런타임 구성 요소를 사용하는 방법을 살펴봅니다.

연습: 작업 및 XML HTTP 요청을 사용하여 연결
UWP 앱의 웹 서비스에 HTTP GET 및 POST 요청을 보내는 작업과 함께 IXMLHTTPRequest2 및 IXMLHTTPRequest2Callback 인터페이스를 사용하는 방법을 보여 줍니다.

Bing 지도 Trip Optimizer 샘플
HttpRequest 전체 UWP 앱의 컨텍스트에서 작업 및 XML HTTP 요청 사용 커넥트 연습에 정의된 클래스를 사용합니다.

C++ 샘플을 사용하여 Windows 런타임 DLL 구성 요소 만들기
Windows 런타임 C++ 템플릿 라이브러리를 사용하여 in-process DLL 구성 요소를 만들고 C++/CX, JavaScript 및 C#에서 사용하는 방법을 보여 있습니다.

DirectX marble maze 게임 샘플
Windows 런타임 C++ 템플릿 라이브러리를 사용하여 완전한 3차원 게임의 컨텍스트에서 DirectX 및 Media Foundation과 같은 COM 구성 요소의 수명을 관리하는 방법을 보여 줍니다.

데스크톱 앱의 알림 메시지
데스크톱 앱에서 알림 메시지를 보내는 방법을 보여 줍니다.

WINDOWS 런타임 C++ 템플릿 라이브러리와 ATL 비교

Windows 런타임 C++ 템플릿 라이브러리는 작고 빠른 COM 개체를 만드는 데 사용할 수 있으므로 ATL(활성 템플릿 라이브러리)과 유사합니다. Windows 런타임 C++ 템플릿 라이브러리 및 ATL은 모듈의 개체 정의, 인터페이스의 명시적 등록, 팩터리를 사용하여 개체의 열린 만들기와 같은 개념도 공유합니다. ATL에 익숙한 경우 Windows 런타임 C++ 템플릿 라이브러리에 익숙할 수 있습니다.

Windows 런타임 C++ 템플릿 라이브러리는 UWP 앱에 필요한 COM 기능을 지원합니다. 따라서 다음과 같은 COM 기능에 대한 직접 지원이 생략된다는 점에서 ATL과 구별됩니다.

  • 집계

  • 재고 구현

  • 이중 인터페이스(IDispatch)

  • 표준 열거자 인터페이스

  • 연결 지점

  • 분리 인터페이스

  • OLE 포함

  • ActiveX 컨트롤

  • COM+

개념

Windows 런타임 C++ 템플릿 라이브러리는 몇 가지 기본 개념을 나타내는 형식을 제공합니다. 다음 단원에서는 이러한 형식에 대해 설명합니다.

ComPtr

ComPtr 은 템플릿 매개 변수를 통해 지정된 인터페이스를 나타내는 스마트 포인터 형식입니다. ComPtr 을 사용하여 인터페이스에서 파생된 개체의 멤버를 액세스할 수 있는 변수를 정의합니다. ComPtr은 기본 인터페이스 포인터의 참조 개수를 자동으로 관리하여 참조 횟수가 0이 되면 인터페이스를 릴리스합니다.

RuntimeClass

RuntimeClass 는 지정된 인터페이스 집합을 상속받는 인스턴스화된 클래스를 나타냅니다. 개체는 RuntimeClass 하나 이상의 Windows 런타임 COM 인터페이스에 대한 지원 조합 또는 구성 요소에 대한 약한 참조를 제공할 수 있습니다.

모듈

Module 은 관련 개체의 컬렉션을 나타냅니다. Module 개체는 개체를 생성하는 클래스 팩터리와, 다른 애플리케이션이 개체를 사용할 수 있도록 하는 등록을 관리합니다.

콜백

Callback 함수는 멤버 함수가 이벤트 처리기(콜백 메서드)인 개체를 생성합니다. Callback 함수를 사용하여 비동기 작업을 작성합니다.

EventSource

EventSource대리자 이벤트 처리기를 관리하는 데 사용됩니다. Windows 런타임 C++ 템플릿 라이브러리를 사용하여 대리자를 구현하고 대리자를 추가, 제거 및 호출하는 데 사용합니다EventSource.

AsyncBase

AsyncBase는 Windows 런타임 비동기 프로그래밍 모델을 나타내는 가상 메서드를 제공합니다. 비동기 작업을 시작, 중지하거나 작업의 진행률을 확인할 수 있는 사용자 지정 클래스를 만들려면 이 클래스의 멤버를 재정의합니다.

FtmBase

FtmBase 는 자유 스레드된 마샬러 개체를 나타냅니다. FtmBase는 GIT(전역 인터페이스 테이블)을 생성하고 마샬링 및 프록시 개체의 관리를 지원합니다.

WeakRef

WeakRef 는 액세스할 수 있거나 액세스하지 못할 수 있는 개체를 참조하는 약한 참조를 나타내는 스마트 포인터 형식입니다. 개체는 WeakRef 클래식 COM이 아닌 Windows 런타임만 사용할 수 있습니다.

WeakRef 개체는 일반적으로 외부 스레드나 애플리케이션에서 제어하는 개체를 나타냅니다. 예를 들어 WeakRef 개체는 파일 개체를 참조할 수 있습니다. 파일을 열면 WeakRef 가 유효해지고 참조 파일을 액세스할 수 있게 됩니다. 하지만 파일이 닫히면 WeakRef 가 무효가 되고 파일을 액세스할 수 없게 됩니다.

범주별 키 API
기본 Windows 런타임 C++ 템플릿 라이브러리 형식, 함수 및 매크로를 강조 표시합니다.

참조
Windows 런타임 C++ 템플릿 라이브러리에 대한 참조 정보를 포함합니다.

빠른 참조(C++/CX)
Windows 런타임 지원하는 C++/CX 기능에 대해 간략하게 설명합니다.

Visual C++에서 Windows 런타임 구성 요소 사용
C++/CX를 사용하여 기본 Windows 런타임 구성 요소를 만드는 방법을 보여줍니다.