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::Make 및 Microsoft::WRL::Details::MakeAndInitialize 함수를 사용하여 구성 요소를 정의하는 모듈의 구성 요소를 인스턴스화하는 방법을 알아봅니다.
방법: winmdidl.exe 및 midlrt.exe를 사용하여 Windows 메타데이터에서 .h 파일 만들기
.winmd 메타데이터에서 IDL 파일을 만들어 WRL의 사용자 지정 Windows 런타임 구성 요소를 사용하는 방법을 살펴봅니다.
연습: 작업 및 XML HTTP 요청을 사용하여 연결
UWP 앱의 웹 서비스에 HTTP GET 및 POST 요청을 보내는 작업과 함께 IXMLHTTPRequest2 및 IXMLHTTPRequest2Callback 인터페이스를 사용하는 방법을 보여 줍니다.
Bing Maps 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 함수는 멤버 함수가 이벤트 처리기(콜백 메서드)인 개체를 생성합니다. 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 런타임 구성 요소를 만드는 방법을 보여줍니다.