ATL 介 绍 ( 三 ) 吕 思 伟---- 潘 爱 民
---- ( 接 上 期)
-
允 许 支 持MFC。 由 于ATL 对 除COM 以 外 的 基 本 的Windows 编 程 方 面 的 支 持 极 为 有 限, 同 时 许 多 程 序 员 对MFC 又 非 常 熟 悉, 因 此 在ATL 的 工 程 设 置 中 允 许 在ATL 工 程 内 部 支 持 使 用MFC, 即 可 以 使 用MFC 定 义 的 类。 这 一 特 点 给 开 发 人 员 提 供 了 许 多 方 便, 特 别 对 于 习 惯 使 用MFC 的 人 来 说, 能 够 使 用MFC 提 供 的 各 种 功 能 强 大 的 类 的 支 持, 而 不 必 直 接 使 用Windows SDK。 从 另 一 个 方 面 来 看, 在ATL 工 程 中 使 用MFC 同 时 就 丧 失 了ATL 代 码 轻 量 级 的 特 点。
- 支 持MTS。MTS 是Microsoft Transaction Server 的 缩 写, 它 是Microsoft 在COM 技 术 方 面 的 一 个 新 的 分 支, 这 里 不 做 详 细 说 明。
---- 完 成 上 面 的 设 置 以 后, 可 以 选 择Finish 完 成 工 程 的 设 置,ATL 将 创 建 相 应 的 工 程。
---- 2 . 加 入ATL 类
---- 完 成 工 程 的 创 建 和 设 置 以 后, 下 一 步 就 是 向 工 程 中 加 入 一 个 新 的ATL 类。Visual Studio 集 成 环 境 提 供 了 向 导 工 具"ATL Object Wizard" 用 于 加 入 一 个 新 的ATL 类。 操 作 过 程 并 不 复 杂, 只 是 一 组 对 话 框 操 作 而 已。
---- 首 先 通 过 集 成 环 境 的"Insert" 菜 单 下 的"New ATL Object..." 命 令 进 入"ATL Object Wizard" 对 话 框, 如 图1 所 示。
图1 ATL Object Wizard 对 话 框 示 意 图
---- 这 个 对 话 框 即 为 创 建ATL 对 象 的 向 导 起 始 界 面。 对 话 框 的 左 边 部 分 说 明 了 待 创 建 对 象 的 基 本 类 型, 这 里 主 要 有 以 下 几 种 类 型:
-
对 象(Object) 基 本 的COM 对 象 类 型;
-
控 制(Control) ActiveX Control 类 型 的ATL 对 象;
-
其 他(Miscellaneous) 辅 助 功 能, 如 对 话 框 的 生 成 等;
- 数 据 访 问(Data Access) 数 据 访 问, 支 持MTS 等。
---- 右 边 部 分 说 明 了 每 种 类 型 的 详 细 内 容。 对 于 一 般 的COM 服 务 程 序, 使 用 对 象 表 中 的 简 单 对 象(Simple Object) 就 可 以 了。
---- 选 定 待 创 建 对 象 的 基 本 类 型 以 后, 单 击"Next" 按 钮 进 入 下 一 步, 进 入 对 象 属 性 设 置 对 话 框。
---- 对 象 属 性 设 置 分 为 两 个 过 程: 先 是 对 象 名 字 标 识 的 设 定, 然 后 是 对 对 象 的 基 本 属 性 进 行 设 置。 首 先 是 对 象 的 名 字 标 识 设 置, 如 图2 所 示。
图2 对 象 名 字 标 识 设 置 对 话 框 示 意 图
---- 在 对 象 标 识 编 辑 框 中 输 入 待 创 建 对 象 的 名 字,ATL 对 象 向 导 将 同 步 地 根 据 用 户 输 入 的 对 象 标 识 设 定 该 对 象 的C++ 标 识 和COM 标 识。 对 象 的C++ 标 识 包 括 对 象 的 类 名、cpp 文 件 名 和 头 文 件 名。COM 标 识 包 括 对 象 在 类 型 库 中 的CoClass 段 和 实 现 的 主 接 口 的 名 字, 同 时 还 有 在 系 统 注 册 表 中 的 类 型 名 以 及ProgID。
---- 对 象 名 字 标 识 设 置 完 成 以 后, 选 择 对 象 属 性 页(Attribute) 进 入 对 象 的 属 性 设 置 页 面, 如 图3 所 示。
图3 对 象 属 性 设 置 对 话 框 示 意 图
---- 对 象 的 属 性 设 置 是ATL 对 象 创 建 过 程 中 最 复 杂 的 部 分, 包 括 以 下 几 个 主 要 部 分:
-
对 象 的 线 程 模 型(Thread Model)
对 象 的 线 程 模 型 是COM 对 象 在 多 线 程 环 境 下 被 访 问 时 对 访 问 方 式 的 控 制, 缺 省 情 况 下 在ATL 中 采 用 的 是 套 间 模 型Apartment, 由 系 统 通 过 消 息 队 列 方 式 提 供 并 发 控 制。
-
对 象 的 接 口 模 型(Interface)
COM 对 象 的 接 口 可 以 是 双 接 口(Dual Interface)。 双 接 口 不 同 于 普 通 接 口(Custom Interface) 之 处 在 于 双 接 口 是 从Automation 基 本 接 口IDispatch 继 承 的, 而 普 通 接 口 是 从IUnknown 接 口 直 接 继 承 来 的。 缺 省 的 接 口 模 型 是 双 接 口。
-
对 象 的 聚 合 模 型(Aggregate)
COM 规 范 不 允 许 对 象 的 实 现 继 承, 但 是 可 以 通 过 聚 合 方 式 重 用 其 他 的COM 对 象。ATL 对 象 属 性 设 置 中 的 聚 合 模 型 可 以 指 定 待 创 建 的COM 对 象 是 否 支 持 聚 合 模 型。 缺 省 的 选 项 是 支 持 对 象 的 聚 合。
-
对 象 对 错 误 处 理 的 支 持(Support ISupportErrorInfo)
选 取 这 个 选 项 可 以 在 对 象 的 运 行 过 程 中 支 持 错 误 处 理。 缺 省 情 况 下 这 个 选 项 不 被 选 中。
-
对 象 对 连 接 点 的 支 持(Support Connection Points)
连 接 点 是COM 对 象 的 事 件 机 制。 选 中 这 个 选 项 可 以 使 待 创 建 的COM 对 象 具 有 发 出 事 件 的 能 力。 缺 省 情 况 下 该 选 项 不 被 选 中。
-
对 象 对 自 由 线 程 调 度 的 支 持(Free Thread Marshaller, 简 称FTM)
对 象 的 自 由 线 程 调 度 是 对 象 在 处 于 自 由 线 程 模 型 状 态 下, 为 了 简 化 对 象 的 访 问 过 程 而 采 用 的 一 种 优 化 策 略。 缺 省 情 况 下 该 选 项 不 被 选 中。
---- 对 于 上 述 的 任 何 一 个 选 项 的 详 细 描 述 都 涉 及 到COM 技 术 一 些 核 心 的 内 容, 并 且 都 已 超 出 本 文 的 范 围, 因 此 本 文 只 对ATL 给 出 的 缺 省 选 项 加 以 说 明, 对 这 些 内 容 感 兴 趣 的 读 者 可 以 参 考Microsoft 提 供 的 文 档。
---- 完 成 了 上 面 的 设 置 以 后, 就 可 以 按"OK" 按 钮 完 成 对 象 的 创 建 过 程。 下 一 步 就 是 向 所 生 成 的ATL 类 的 接 口 中 加 入 成 员 函 数 的 定 义, 以 及 接 口 成 员 函 数 的 实 现 过 程。
---- 3. 加 入 接 口 定 义, 实 现 接 口 函 数
---- 加 入 了ATL 类 定 义 之 后, 我 们 可 以 打 开Visual C++ 集 成 环 境 下 项 目 管 理 器(Workspace) 中 的Class View 来 检 查 生 成 的 类 定 义 的 情 况( 见 图4)。 我 们 可 以 看 到 一 个 新 的 类 已 经 生 成, 同 时 还 生 成 了 相 应 的 接 口 定 义。ATL Object Wizard 为 我 们 生 成 了 类 定 义 的.h 和.cpp 文 件, 此 外 还 有 用 于 接 口 定 义 的IDL 文 件。 有 了 这 些 文 件 以 后, 我 们 就 可 以 为 接 口 加 入 成 员 函 数, 完 成 类 的 定 义。
图4 ATL 工 程 的ClassView 示 意 图
---- 首 先 在Class View 中 选 中 相 应 的 接 口, 图4 中 显 示 为 接 口IATLTest, 单 击 鼠 标 右 键 打 开 菜 单, 如 图5。 此 弹 出 式 菜 单 定 义 了 为 接 口 加 入 属 性 和 方 法 的 操 作。 选 取 其 中 的"Add Method" 项 可 以 为 接 口 加 入 方 法 成 员, 选 取"Add Property" 则 可 以 为 接 口 加 入 新 的 属 性 成 员。
图5 接 口 编 辑 菜 单 示 意 图
---- 加 入 属 性 和 方 法 的 对 话 框 可 以 参 看 图6 和 图7。 如 果 我 们 要 在 接 口 中 加 入 一 个 方 法, 则 选 取"Add Method" 菜 单 命 令。 假 设 方 法 名 为ABC, 方 法 的 返 回 类 型 为COM 规 定 的HRESULT 类 型。 我 们 也 可 以 定 义 非HRESULT 返 回 类 型 的 函 数, 但 是 这 需 要 手 工 修 改 接 口 定 义 的IDL 文 件。 我 们 定 义ABC 方 法 的 一 个 参 数 为a, 类 型 为 整 数 型。 完 成 了 方 法 的 定 义 以 后, 单 击"OK" 按 钮 则 把 此 方 法 加 入 到 接 口 中。
图6 加 入 接 口 方 法 的 界 面
图7 加 入 接 口 属 性 的 界 面
---- 属 性 的 加 入 过 程 是 类 似 的。 属 性 加 入 对 话 框 要 求 指 定 属 性 的 类 型、 名 字 以 及 属 性 的 访 问 方 式。 在 属 性 和 方 法 的 编 辑 对 话 框 中 都 有 一 个"Attributes" 按 钮, 在 给 出 了 一 个 属 性 或 方 法 的 基 本 定 义 之 后, 单 击 此 按 钮, 可 以 对 属 性 和 方 法 的 一 些 高 级 特 性 进 行 设 置。
---- 方 法 成 员 加 入 以 后, 我 们 可 以 通 过Class View 来 检 查ATL 为 我 们 所 做 的 工 作, 如 图8 所 示。 首 先 我 们 看 到ATL 在 接 口 的 定 义 中 加 入 了 该 方 法 的 定 义, 同 时 在 对 应 的ATL 类 定 义 中, 也 加 入 了 一 个 相 应 的 方 法 的 定 义, 在 类 对 应 的.cpp 文 件 中, 加 入 了 此 方 法 的 实 现 框 架。 此 后, 我 们 只 要 在 这 个 函 数 框 架 中 加 入 该 方 法 的 代 码 逻 辑, 一 个 接 口 函 数 的 定 义 和 实 现 就 基 本 完 成 了。 依 照 这 种 方 式, 我 们 可 以 完 成 整 个COM 对 象 的 定 义 和 实 现。
图8 加 入 接 口 方 法 以 后 的Class View
---- 完 成 以 上 的 步 骤 之 后, 我 们 就 可 以 编 译 连 接 应 用 了。( 未 完 待 续)
---- ( 作 者 地 址: 北 京 大 学 计 算 机 科 学 技 术 研 究 所,100871; 收 稿 日 期:1999.08)
分享到:
相关推荐
根据提供的文件信息,这份《Atl---ian-Atl---ian数据中心终极指南-2020.12-26页精品报告2020.pdf》是关于Atl---ian公司提供的企业级数据中心解决方案的详细报告。报告内容涵盖了产品介绍、迁移指南、升级指导、功能...
这个“ATL开发指南”是一份专为C++开发者设计的中文参考资料,旨在帮助他们深入理解和高效利用ATL进行软件开发。下面我们将详细探讨ATL的核心概念、主要功能以及如何使用ATL来构建COM组件。 ATL的核心概念: 1. **...
【Keetano-ATL-MyGangsta】是一个与字体设计相关的项目,可能是由设计师或团队Keetano创建的一款独特字体。ATL可能代表"Atlanta",这可能表明该字体设计受到了亚特兰大城市文化的影响,或者它可能是设计师自创的缩写...
ESXI 6.0 INTER 网卡驱动程序,net-atl1e-1.0.1.14-1.x86_64.vib,有需要的朋友可以参考一下,需要第三方软件写,只适合6.0,不适合6.5
《ICESat-2全球定位光子算法文档ATL03》是NASA的冰、云和陆地高程卫星-2(ICESat-2)项目的一个关键理论基础文档,旨在详细阐述ATL03数据产品的生成原理和技术细节。该文档由NASA的科学家们共同准备,涉及了测绘、...
**ICESAT-2 + ATL03 + ATL08 知识点详解** ICESAT-2(Ice, Cloud, and land Elevation Satellite-2)是美国国家航空航天局(NASA)发射的一颗卫星,主要任务是通过激光雷达(Lidar)技术测量全球冰层、森林和地形的...
本指南旨在为开发者提供深入理解ATL的知识,帮助他们有效地利用此技术进行Windows平台上的程序设计。 ATL的核心设计理念是简洁和高效。它通过C++模板技术实现了对COM接口的最小化实现,减少了不必要的内存开销,...
在VC++中,可以使用ATL Project Wizard来生成ATL项目,选择适当的项目类型(如控制台、DLL或exe),然后添加你需要的接口和类。 ATL还支持 ATL Simple Objects,这是一种快速创建简单COM对象的方法,适用于只需要一...
本资料集合了ATL的入门级知识点,旨在帮助开发者快速理解和上手ATL技术。 1. ATL基础知识: - ATL的设计理念:ATL的目标是简化COM编程,通过模板和宏来减少代码量,提高开发效率。 - ATL与MFC(Microsoft ...
在深入探讨ATL技术内幕之前,我们先来理解一下ATL的基本概念。 ATL的核心在于模板类和宏,这些模板类和宏简化了COM对象的实现,使得开发者能够快速创建接口、事件处理程序和自动化服务器。ATL通过提供诸如...
这本书籍对于想要深入理解ATL技术的初学者来说是一份宝贵的资源。ATL是C++编程中一个重要的工具,尤其在构建轻量级、高性能的COM对象时,它的优势尤为突出。 ATL编程的核心概念主要围绕以下几个方面: 1. **COM...
ATL-COM-Shell扩展编程是一门深入探讨Windows操作系统中Shell扩展、Active Template Library (ATL)以及Component Object Model (COM)技术的综合教程。这三个关键知识点构成了Windows系统级编程的重要组成部分,尤其...
本项目"VC-ATL-服务开发示例"正是基于VC++和ATL技术,展示了如何创建和管理Windows系统服务。 在Windows系统服务开发中,我们需要了解以下几个核心概念: 1. **服务控制管理器(Service Control Manager, SCM)**...
本资料《Virsua C++的ATL高级应用》详细探讨了ATL在实际开发中的高级技巧和应用。 1. ATL基础 - COM对象:ATL是基于COM的,理解COM的基本概念,如接口、IUnknown、QueryInterface、AddRef和Release等,是学习ATL的...
这份名为“ATL---IAN-IT服务管理的未来在于敏捷 - ITIL 4 和 Atl---ian 实用指南”的报告深入探讨了ITIL 4框架与Atlassian解决方案相结合的实践方法,以及如何利用它们提升IT团队的敏捷性和业务价值创造能力。...
python实现ICESat-2 ATL08转shapefile
ATL容器包括如ATL::CArray、ATL::CMap、ATL::CList和ATL::CHeapPtr等,它们是高效且轻量级的替代标准模板库(STL)中的容器。这些容器在设计时考虑了COM组件的性能需求,因此在内存管理、线程安全和接口实现等方面具有...
更高级别的ATLAS/ICESat-2数据产品(ATL 03及以上)由地面轨道组织,地面轨道1 L和1 R形成对一,地面轨道2L和2 R形成对二,地面轨道3L和3R形成对三。每对还有一对轨道-左右梁实际位置之间的假想线(见图1)。成对...
在"ATL开发指南"这本书中,作者深入浅出地讲解了ATL的原理和使用方法,包括基础概念、对象模型、接口实现、事件处理、服务器和控件的创建等。随书附带的代码通常包含了大量的示例和实践项目,以便读者能够更好地理解...
ATL中的Tear-off接口实现主要是通过`IUnknown`的派生和`IDispatch`的实现来完成的。在描述中提到的博客链接可能详细解释了如何在ATL项目中创建和使用Tear-off接口。由于无法直接访问该链接,我会在这里提供一个基本...