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 的资源。
Windows 运行库 (WRL)
在这个第 9 频道视频中,你可以详细了解 WRL 如何帮助你编写 Windows 应用商店应用,以及如何生成和使用 Windows 运行时组件。如何:使用 WRL 激活和使用 Windows 运行时组件
演示如何使用 WRL 初始化 Windows 运行时以及激活和使用 Windows 运行时组件。如何:使用 WRL 完成异步操作
演示如何使用 WRL 启动异步操作并在操作完成时执行工作。如何:使用 WRL 处理事件
演示如何使用 WRL 订阅和处理 Windows 运行时对象的事件。演练:使用 WRL 创建基本 Windows 运行时组件
演示如何使用 WRL 创建将两个数字相加的基本 Windows 运行时组件。 此外,还会演示如何引发事件,以及如何使用来自使用 JavaScript 的 Windows 应用商店应用的组件。演练:使用 WRL 和 Media Foundation 创建 Windows 应用商店应用程序
了解如何创建使用 Microsoft 媒体基础的 Windows 应用商店应用。如何:使用 WRL 创建传统型 COM 组件
演示如何使用 WRL 创建基本的 COM 组件,以及从桌面应用程序注册和使用 COM 组件的基本方法。如何:直接实例化 WRL 组件
了解如何使用 Microsoft::WRL::Make 和 Microsoft::WRL::Details::MakeAndInitialize 函数从定义组件的模块实例化组件。如何:使用 winmdidl.exe 和 midlrt.exe 通过窗口元数据创建 .h 文件
演示如何通过从 .winmd 元数据创建 IDL 文件,使用 WRL 中的自定义 Windows 运行时组件。演练:使用任务和 XML HTTP 请求进行连接
演示如何将 IXMLHTTPRequest2 和 IXMLHTTPRequest2Callback 接口与任务结合使用,以将 HTTP GET 和 POST 请求发送至 Windows 应用商店应用中的 Web 服务。Bing 地图行程优化器示例
在完整 Windows 应用商店应用上下文中使用 演练:使用任务和 XML HTTP 请求进行连接中定义的 HttpRequest 类。使用 C++ 创建 Windows 运行时 DLL 组件示例
演示如何使用 WRL 创建进程内 DLL 组件,以及如何在 C++/CX、JavaScript 和 C# 中使用它。DirectX 大理石迷宫游戏示例
演示如何使用 WRL 管理 COM 组件(比如,完整的三维游戏上下文中的 DirectX 和媒体基础)的生存期。从桌面应用发送 toast 通知示例
演示如何在桌面应用程序中将 WRL 与 toast 通知一起使用。
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 类库项目模板。 此模板有助于简化使用 Visual Studio 创建 Windows 运行时组件的任务。 |
|
重点介绍主要的 WRL 类型、函数和宏。 |
|
包含有关 WRL 的参考信息。 |
|
简要介绍支持 Windows 运行时的 C++/CX 功能。 |
|
演示如何使用 C++/CX 创建基本 Windows 运行时组件。 |