Windows 运行时 C++ 模板库 (WRL)

Windows 运行时 C++ 模板库 (WRL) 是一个模板库,提供了一种生成和使用 Windows 运行时组件的简单方法。

优点

利用 WRL,你可以更轻松地实现和使用组件对象模型 (COM) 组件。 它提供引用计数这类管理技术来管理对象的生存期,并可通过测试 HRESULT 值来确定操作是否成功。 若要成功使用 WRL,你必须认真遵循这些规则和技术。

Visual C++ 组件扩展 (C++/CX) 是一种高级的、基于语言的 Windows 运行时组件使用方式。 WRL 和 C++/CX 均可替你自动执行管理任务,从而简化 Windows 运行时的代码编写。

WRL 和 C++/CX 具有不同的优点。 基于以下原因,你可能需要使用 WRL 而不是 C++/CX:

  • WRL 不需要在 Windows 运行时应用程序二进制接口 (ABI) 上添加抽象,从而让你能够控制基础代码,以便更好地创建或使用 Windows 运行时 API。

  • C++/CX 将 COM HRESULT 值表示为异常。 如果继承了使用 COM 或不使用异常的基本代码,你可能会发现 WRL 可以更自然地与 Windows 运行时搭配使用,因为你不必使用异常。

    备注

    WRL 使用 HRESULT 值,且不会引发异常。此外,WRL 还会使用智能指针和 RAII 模式,以帮助确保在应用程序代码引发异常时正确销毁对象。有关智能指针和 RAII 的更多信息,请参见智能指针(现代 C++)对象所有资源 (RAII)

  • WRL 的用途和设计是由活动模板库 (ATL) 创作而来。活动模板库是一组基于模板的 C++ 类,可以简化编程 COM 对象。 由于 WRL 使用标准 C++ 包装 Windows 运行时,因此可以更轻松地让许多写入 ATL 的现有 COM 组件与 Windows 运行时进行交互和端口通信。 如果你已经知道 ATL,你可能会发现 WRL 编程变得更加容易。

入门

以下是一些可帮助你立即开始使用 WRL 的资源。

WRL 与 ATL 比较

WRL 与活动模板库 (ATL) 相似,因为你也可使用它来快速创建小型 COM 对象。 WRL 和 ATL 之间还存在一些相同的概念,例如在模块中定义对象、显式注册接口,以及使用工厂开始创建对象。 如果你熟悉 ATL,可能就会适应 WRL。

WRL 支持 Windows 应用商店应用所需的 COM 功能。 因此,它又与 ATL 有所不同,因为它无法直接支持下列 COM 功能:

  • 聚合

  • 常用实现

  • 双重接口 (IDispatch)

  • 标准枚举器接口

  • 连接点

  • 分离式接口

  • OLE 嵌入

  • ActiveX 控件

  • COM+

概念

WRL 提供了几个类型来表示几种基本的概念。 以下几节将介绍这些类型。

ComPtr

ComPtr 是一种智能指针类型,表示由模板参数指定的接口。 使用 ComPtr 可以声明能够访问从接口派生的对象成员的变量。 ComPtr 会自动维护基础接口指针的引用计数,并在引用计数变为零时发布接口。

RuntimeClass

RuntimeClass 表示继承一组指定接口的实例化类。 RuntimeClass 对象既可支持一个或多个 Windows 运行时 COM 接口,也可提供对组件的弱引用。

模块

模块表示一组相关的对象。 Module对象管理类工厂和注册。类工厂可以创建对象,注册则让其他应用程序能够使用对象。

回调

回调函数可以创建对象,该对象的成员函数为事件处理程序(回调方法)。 使用 Callback 函数可以编写异步操作。

EventSource

EventSource 用于管理委托事件处理程序。 使用 WRL 可以实现委托,使用 EventSource 可以添加、移除和调用委托。

AsyncBase

AsyncBase 提供表示 Windows 运行时异步编程模型的虚方法。 重写此类中的成员可以创建能够启动、停止或检查异步操作进度的自定义类。

FtmBase

FtmBase 表示自由线程封送拆收器对象。 FtmBase 可以创建全局接口表 (GIT),并帮助管理封送处理和代理对象。

WeakRef

WeakRef 是表示弱引用的智能指针类型。弱引用可引用能够访问或者不能访问的对象。 WeakRef 对象仅可由 Windows 运行时使用,而不能由传统 COM 使用。

WeakRef 对象通常表示由外部线程或应用程序控制其存在性的对象。 例如,WeakRef 对象可以引用文件对象。 当文件打开时,WeakRef 有效,并且引用的文件可以访问。 当文件关闭时,WeakRef 无效,并且文件不可访问。

相关主题

WRL 类库项目模板

介绍如何访问 WRL 类库项目模板。 此模板有助于简化使用 Visual Studio 创建 Windows 运行时组件的任务。

按类别列出的关键 WRL API

重点介绍主要的 WRL 类型、函数和宏。

WRL 引用

包含有关 WRL 的参考信息。

快速参考(Windows 运行时和 Visual C++)

简要介绍支持 Windows 运行时的 C++/CX 功能。

在 Visual C++ 中使用 Windows 运行时组件

演示如何使用 C++/CX 创建基本 Windows 运行时组件。