`
yesjavame
  • 浏览: 689562 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

吕 思 伟 ---- 潘 爱 民 :: ATL 介 绍( 一)

阅读更多

ATL 介 绍( 一)

吕 思 伟 ---- 潘 爱 民


一、 什 么 是ATL

---- 1 .COM 的 发 展 及 其 局 限 性

---- 自 从1993 年Microsoft 首 次 公 布 了COM 技 术 以 后,Windows 平 台 上 的 开 发 模 式 发 生 了 巨 大 的 变 化, 以COM 为 基 础 的 一 系 列 软 件 组 件 化 技 术 将Windows 编 程 带 入 了 组 件 化 时 代。 广 大 开 发 人 员 在 为COM 带 来 的 软 件 组 件 化 趋 势 欢 欣 鼓 舞 的 同 时, 对 于COM 开 发 技 术 的 难 度 和 烦 琐 的 细 节 也 感 到 极 其 的 不 便。COM 编 程 一 度 被 视 为 一 种 高 不 可 攀 的 技 术, 令 人 望 而 却 步。 开 发 人 员 希 望 能 够 有 一 种 方 便 快 捷 的COM 开 发 工 具, 提 高 开 发 效 率, 更 好 地 利 用 这 项 技 术。

---- 针 对 这 种 情 况,Microsoft 公 司 在 推 出COM SDK 以 后, 为 简 化COM 编 程, 提 高 开 发 效 率, 采 取 了 许 多 方 案, 特 别 是 在MFC(Microsoft Foundation Class) 中 加 入 了 对COM 和OLE 的 支 持。 但 是 随 着Internet 的 发 展, 分 布 式 的 组 件 技 术 要 求COM 组 件 能 够 在 网 络 上 传 输, 而 又 尽 量 节 约 宝 贵 的 网 络 带 宽 资 源。 采 用MFC 开 发 的COM 组 件 由 于 种 种 限 制 不 能 很 好 地 满 足 这 种 需 求, 因 此Microsoft 在1995 年 又 推 出 了 一 种 全 新 的COM 开 发 工 具 — —ATL。

---- ATL 是ActiveX Template Library 的 缩 写, 它 是 一 套C++ 模 板 库。 使 用ATL 能 够 快 速 地 开 发 出 高 效、 简 洁 的 代 码, 同 时 对COM 组 件 的 开 发 提 供 最 大 限 度 的 代 码 自 动 生 成 以 及 可 视 化 支 持。 为 了 方 便 使 用, 从Microsoft Visual C++ 5.0 版 本 开 始,Microsoft 把ATL 集 成 到Visual C++ 开 发 环 境 中。1998 年9 月 推 出 的Visual Studio 6.0 集 成 了ATL 3.0 版 本。 目 前,ATL 已 经 成 为Microsoft 标 准 开 发 工 具 中 的 一 个 重 要 成 员, 日 益 受 到C++ 开 发 人 员 的 重 视。

---- ATL 究 竟 给 开 发 人 员 带 来 了 什 么 样 的 益 处 呢 ? 这 要 先 从ATL 产 生 以 前 的COM 开 发 方 式 说 起。

---- 在ATL 产 生 以 前, 开 发COM 组 件 的 方 法 主 要 有 两 种: 一 是 使 用COM SDK 直 接 开 发COM 组 件, 另 一 种 方 式 是 通 过MFC 提 供 的COM 支 持 来 实 现。

---- 直 接 使 用COM SDK 开 发COM 组 件 是 最 基 本 也 是 最 灵 活 的 方 式。 通 过 使 用Microsoft 提 供 的 开 发 包, 我 们 可 以 直 接 编 写COM 程 序。 但 是, 这 种 开 发 方 式 的 难 度 和 工 作 量 都 很 大, 一 方 面, 要 求 开 发 者 对 于COM 的 技 术 原 理 具 有 比 较 深 入 的 了 解( 虽 然 对 技 术 本 身 的 深 刻 理 解 对 使 用 任 何 一 种 工 具 都 是 非 常 有 益 的, 但 对 于COM 这 样 一 整 套 复 杂 的 技 术 而 言, 在 短 时 间 内 完 全 掌 握 是 很 难 的); 另 一 方 面, 直 接 使 用COM SDK 要 求 开 发 人 员 自 己 去 实 现COM 应 用 的 每 一 个 细 节, 完 成 大 量 的 重 复 性 工 作。 这 样 做 的 结 果 是, 不 仅 降 低 了 工 作 效 率, 同 时 也 使 开 发 人 员 不 得 不 把 许 多 精 力 投 入 到 与 应 用 需 求 本 身 无 关 的 技 术 细 节 中。 虽 然 这 种 开 发 方 式 对 于 某 些 特 殊 的 应 用 很 有 必 要, 但 这 种 编 程 方 式 并 不 符 合 组 件 化 程 序 设 计 方 法 所 倡 导 的 可 重 用 性, 因 此, 直 接 采 用COM SDK 不 是 一 种 理 想 的 开 发 方 式。

---- 使 用MFC 提 供 的COM 支 持 开 发COM 应 用 可 以 说 在 使 用COM SDK 基 础 上 提 高 了 自 动 化 程 度, 缩 短 了 开 发 时 间。MFC 采 用 面 向 对 象 的 方 式 将COM 的 基 本 功 能 封 装 在 若 干MFC 的C++ 类 中, 开 发 者 通 过 继 承 这 些 类 得 到COM 支 持 功 能。 为 了 使 派 生 类 方 便 地 获 得COM 对 象 的 各 种 特 性,MFC 中 有 许 多 预 定 义 宏, 这 些 宏 的 功 能 主 要 是 实 现COM 接 口 的 定 义 和 对 象 的 注 册 等 通 常 在COM 对 象 中 要 用 到 的 功 能。 开 发 者 可 以 使 用 这 些 宏 来 定 制COM 对 象 的 特 性。

---- 另 外, 在MFC 中 还 提 供 对Automation 和ActiveX Control 的 支 持, 对 于 这 两 个 方 面,Visual C++ 也 提 供 了 相 应 的AppWizard 和ClassWizard 支 持, 这 种 可 视 化 的 工 具 更 加 方 便 了COM 应 用 的 开 发。

---- MFC 对COM 和OLE 的 支 持 确 实 比 手 工 编 写COM 程 序 有 了 很 大 的 进 步。 但 是MFC 对COM 的 支 持 还 不 够 完 善 和 彻 底, 例 如 对COM 接 口 定 义 的IDL 语 言,MFC 并 没 有 任 何 支 持, 此 外 对 于 近 些 年 来COM 和ActiveX 技 术 的 新 发 展MFC 也 没 有 提 供 灵 活 的 支 持。 这 是 由MFC 设 计 的 基 本 出 发 点 决 定 的。MFC 被 设 计 成 对Windows 平 台 编 程 开 发 的 面 向 对 象 的 封 装, 自 然 要 涉 及Windows 编 程 的 方 方 面 面,COM 作 为Windows 平 台 编 程 开 发 的 一 个 部 分 也 得 到MFC 的 支 持, 但 是MFC 对COM 的 支 持 是 以 其 全 局 目 标 为 出 发 点 的, 因 此 对COM 的 支 持 必 然 要 服 从 其 全 局 目 标。 从 这 个 方 面 而 言,MFC 对COM 的 支 持 不 能 很 好 地 满 足 开 发 者 的 要 求。

---- 随 着Internet 技 术 的 发 展,Microsoft 将ActiveX 技 术 作 为 其 网 络 战 略 的 一 个 重 要 组 成 部 分 大 力 推 广, 然 而 使 用MFC 开 发 的ActiveX Control, 代 码 冗 余 量 大, 即 所 谓 的“ 肥 代 码”(Fat Code), 而 且 必 须 要 依 赖 于MFC 的 运 行 时 刻 库 才 能 正 确 地 运 行。 虽 然MFC 的 运 行 时 刻 库 只 有 部 分 功 能 与COM 有 关, 但 是 由 于MFC 的 继 承 实 现 的 本 质,ActiveX Control 必 须 背 负 运 行 时 刻 库 这 个 沉 重 的 包 袱。 如 果 采 用 静 态 连 接MFC 运 行 时 刻 库 的 方 式, 这 将 使ActiveX Control 代 码 过 于 庞 大, 在 网 络 上 传 输 时 将 占 据 宝 贵 的 网 络 带 宽 资 源; 如 果 采 用 动 态 连 接MFC 运 行 时 刻 库 的 方 式, 这 将 要 求 浏 览 器 一 方 必 须 具 备MFC 的 运 行 时 刻 库 支 持。 总 之,MFC 对COM 技 术 的 支 持 在 网 络 应 用 的 环 境 下 也 显 得 很 不 灵 活。

---- 2 .ATL 的 目 标

---- 解 决 上 述COM 开 发 方 法 中 的 问 题 正 是ATL 的 基 本 目 标。

---- 首 先,ATL 的 基 本 目 标 就 是 使COM 应 用 开 发 尽 可 能 地 自 动 化, 这 个 基 本 目 标 就 决 定 了ATL 只 面 向COM 开 发 提 供 支 持。 目 标 的 明 确 使ATL 对COM 技 术 的 支 持 达 到 淋 漓 尽 致 的 地 步。 对COM 开 发 的 任 何 一 个 环 节 和 过 程,ATL 都 提 供 支 持, 并 将 与COM 开 发 相 关 的 众 多 工 具 集 成 到 一 个 统 一 的 编 程 环 境 中。 对 于COM/ActiveX 的 各 种 应 用,ATL 也 都 提 供 了 完 善 的Wizard 支 持。 所 有 这 些 都 极 大 地 方 便 了 开 发 者 的 使 用, 使 开 发 者 能 够 把 注 意 力 集 中 在 与 应 用 本 身 相 关 的 逻 辑 上。

---- 其 次,ATL 因 其 采 用 了 特 定 的 基 本 实 现 技 术, 摆 脱 了 大 量 冗 余 代 码, 使 用ATL 开 发 出 来 的COM 应 用 的 代 码 简 练 高 效, 即 所 谓 的“ 瘦 代 码”(Slim Code)。ATL 在 实 现 上 尽 可 能 采 用 优 化 技 术, 甚 至 在 其 内 部 提 供 了 所 有C/C++ 开 发 的 程 序 所 必 须 具 有 的C 启 动 代 码 的 替 代 部 分。 同 时ATL 产 生 的 代 码 在 运 行 时 不 需 要 依 赖 于 类 似MFC 程 序 所 需 要 的 庞 大 的 代 码 模 块, 包 含 在 最 终 模 块 中 的 功 能 是 用 户 认 为 最 基 本 和 最 必 需 的。 这 些 措 施 使 采 用ATL 开 发 的COM 组 件( 包 括ActiveX Control) 可 以 在 网 络 环 境 下 实 现 应 用 的 分 布 式 组 件 结 构。

---- 第 三,ATL 的 各 个 版 本 对Microsoft 的 基 于COM 的 各 种 新 的 组 件 技 术 如MTS、ASP 等 都 有 很 好 的 支 持,ATL 对 新 技 术 的 反 应 速 度 大 大 快 于MFC。ATL 已 经 成 为Microsoft 支 持COM 应 用 开 发 的 主 要 开 发 工 具, 因 此COM 技 术 方 面 的 新 进 展 在 很 短 的 时 间 内 都 会 在ATL 中 得 到 反 映。 这 使 开 发 者 使 用ATL 进 行COM 编 程 可 以 得 到 与 直 接 使 用COM SDK 编 程 同 样 的 灵 活 性 和 强 大 的 功 能。

---- 本 文 的 目 的 就 是 希 望 在 有 限 的 篇 幅 中 能 够 使 读 者 对ATL 的 使 用 和 基 本 原 理 有 一 个 初 步 的 了 解, 为 广 大 的COM 开 发 人 员 更 好 地 使 用ATL 开 发 起 到 抛 砖 引 玉 的 作 用。

二、ATL 基 本 技 术

---- 虽 然 使 用ATL 开 发COM 应 用 是 一 件 非 常 简 单 的 事 情, 但 是 在ATL 简 单 易 用 的 界 面 后 面 却 包 含 着 复 杂 的 技 术。 面 对ATL 生 成 的 大 量 代 码, 我 们 即 使 不 去 深 入 地 了 解 这 些 代 码 的 含 义 也 可 以 开 发 出COM 应 用 来, 但 是 如 果 我 们 要 充 分 地 挖 掘ATL 的 潜 力, 开 发 出 更 灵 活、 强 大 的COM 应 用, 则 必 须 对ATL 使 用 的 基 本 技 术 有 所 了 解。 研 究ATL 的 实 质 最 好 的 教 材 就 是 由Visual C++ 提 供 的ATL 源 代 码。 本 文 这 一 部 分 只 是 对ATL 中 用 到 的 最 基 本 的 技 术 进 行 简 单 的 介 绍。

---- 简 单 地 说 来,ATL 中 所 使 用 的 基 本 技 术 包 括 以 下 几 个 方 面:

  • COM 技 术
  • C++ 模 板 类 技 术(Template)
  • C++ 多 继 承 技 术(Multi-Inheritance)

---- COM 技 术 是 理 解ATL 的 基 础, 使 用ATL 进 行 开 发 要 对COM 技 术 的 基 本 概 念 有 最 低 限 度 的 了 解。 由 于COM 是 一 项 非 常 复 杂 庞 大 的 技 术 体 系, 限 于 本 文 的 篇 幅, 这 里 不 再 赘 述。 对 于 本 文 中 提 到 的COM 基 本 概 念 也 不 做 过 多 的 解 释, 请 读 者 参 阅 有 关 的 参 考 书 籍。 作 为ATL 最 核 心 的 实 现 技 术 的 模 板 是 对 标 准C++ 语 言 的 扩 展, 但 是 在 大 多 数 的C++ 编 程 环 境 中, 人 们 很 少 使 用 它, 这 是 因 为 模 板 的 功 能 虽 然 很 强, 但 是 它 内 部 机 制 比 较 复 杂, 需 要 比 较 多 的C++ 知 识 和 经 验 才 能 灵 活 地 使 用 它。 在MFC 中 的CObjectArray 等 功 能 类 就 是 由 模 板 来 定 义 的。 完 全 通 过 模 板 来 定 义 程 序 的 整 体 类 结 构,ATL 是 迄 今 为 止 做 得 最 为 成 功 的。

---- 所 谓 模 板 类 简 单 地 说 是 对 类 的 抽 象。 我 们 知 道C++ 语 言 用 类 定 义 了 构 造 对 象( 这 里 指C++ 对 象 而 不 是COM 对 象) 的 方 式, 对 象 是 类 的 实 例, 而 模 板 类 定 义 的 是 类 的 构 造 方 式, 使 用 模 板 类 定 义 实 例 化 的 结 果 产 生 的 是 不 同 的 类。 因 此 可 以 说 模 板 类 是“ 类 的 类”。 ( 未 完 待 续)

---- ( 作 者 地 址: 北 京 大 学 计 算 机 科 学 技 术 研 究 所,100871; 收 稿 日 期:1999.08)

---- 责 任 编 辑; 许 菊 芳 xu_jufang@ccw.com.cn

-

分享到:
评论

相关推荐

    Atl---ian-Atl---ian数据中心终极指南-2020.12-26页精品报告2020.pdf

    根据提供的文件信息,这份《Atl---ian-Atl---ian数据中心终极指南-2020.12-26页精品报告2020.pdf》是关于Atl---ian公司提供的企业级数据中心解决方案的详细报告。报告内容涵盖了产品介绍、迁移指南、升级指导、功能...

    ATL开发指南---PDF

    这个“ATL开发指南”是一份专为C++开发者设计的中文参考资料,旨在帮助他们深入理解和高效利用ATL进行软件开发。下面我们将详细探讨ATL的核心概念、主要功能以及如何使用ATL来构建COM组件。 ATL的核心概念: 1. **...

    Keetano-ATL-MyGangsta

    【Keetano-ATL-MyGangsta】是一个与字体设计相关的项目,可能是由设计师或团队Keetano创建的一款独特字体。ATL可能代表"Atlanta",这可能表明该字体设计受到了亚特兰大城市文化的影响,或者它可能是设计师自创的缩写...

    icesat2-atl03-atbd-r005-0.pdf ATL03算法文档

    《ICESat-2全球定位光子算法文档ATL03》是NASA的冰、云和陆地高程卫星-2(ICESat-2)项目的一个关键理论基础文档,旨在详细阐述ATL03数据产品的生成原理和技术细节。该文档由NASA的科学家们共同准备,涉及了测绘、...

    ATL开发指南 ------

    ATL(Active Template Library)是Microsoft开发的一种C++模板库,主要用于构建轻量级、高性能的COM(Component Object Model)组件。本指南旨在为开发者提供深入理解ATL的知识,帮助他们有效地利用此技术进行...

    ICESAT-2 +ATL03 + ATL08

    **ICESAT-2 + ATL03 + ATL08 知识点详解** ICESAT-2(Ice, Cloud, and land Elevation Satellite-2)是美国国家航空航天局(NASA)发射的一颗卫星,主要任务是通过激光雷达(Lidar)技术测量全球冰层、森林和地形的...

    VC-ATL-COM-.rar_ATL com _com atl_vc ATL COM_vc atl

    在VC++中,可以使用ATL Project Wizard来生成ATL项目,选择适当的项目类型(如控制台、DLL或exe),然后添加你需要的接口和类。 ATL还支持 ATL Simple Objects,这是一种快速创建简单COM对象的方法,适用于只需要一...

    net-atl1e-1.0.1.14-1.x86_64.vib

    ESXI 6.0 INTER 网卡驱动程序,net-atl1e-1.0.1.14-1.x86_64.vib,有需要的朋友可以参考一下,需要第三方软件写,只适合6.0,不适合6.5

    ATL入门核心资料

    ATL(Active Template Library)是Microsoft开发的一种C++库,用于构建高效、小型且轻量级的COM(Component Object Model)对象。ATL是面向Windows平台的编程工具,尤其适用于创建COM组件,如控件、服务、服务器应用...

    ATL编程书籍-学习ATL的初学者必备。

    这本书籍对于想要深入理解ATL技术的初学者来说是一份宝贵的资源。ATL是C++编程中一个重要的工具,尤其在构建轻量级、高性能的COM对象时,它的优势尤为突出。 ATL编程的核心概念主要围绕以下几个方面: 1. **COM...

    ATL 技术内幕 ATL技术内幕

    ATL(Active Template Library)是Microsoft开发的一种C++库,用于构建高效、小型且轻量级的COM(Component Object Model)组件。ATL是MFC(Microsoft Foundation Classes)的一个补充,专为创建COM对象而设计,尤其...

    VC-ATL-服务开发示例

    总之,"VC-ATL-服务开发示例"项目提供了一个直观的教程,帮助开发者理解如何利用VC++和ATL创建Windows系统服务。通过学习这个示例,你可以掌握服务的生命周期管理、事件处理和与其他系统组件的交互等关键技术,为...

    Virsua C++的ATL高级应用

    ATL(Active Template Library)是Microsoft为Visual C++开发的一个小型、高效的库,它提供了用于构建COM(Component Object Model)组件的模板类。ATL旨在简化COM对象的创建,尤其适用于那些性能要求高、资源占用少...

    ATL-COM-Shell扩展编程

    ATL-COM-Shell扩展编程是一门深入探讨Windows操作系统中Shell扩展、Active Template Library (ATL)以及Component Object Model (COM)技术的综合教程。这三个关键知识点构成了Windows系统级编程的重要组成部分,尤其...

    ATL---IAN-IT服务管理的未来在于敏捷 - ITIL 4 和 Atl---ian 实用指南-2020.6-35页精品报告2020.pdf

    这份名为“ATL---IAN-IT服务管理的未来在于敏捷 - ITIL 4 和 Atl---ian 实用指南”的报告深入探讨了ITIL 4框架与Atlassian解决方案相结合的实践方法,以及如何利用它们提升IT团队的敏捷性和业务价值创造能力。...

    ATL.rar_ATL_ATL 界面_ATL 容器

    ATL容器包括如ATL::CArray、ATL::CMap、ATL::CList和ATL::CHeapPtr等,它们是高效且轻量级的替代标准模板库(STL)中的容器。这些容器在设计时考虑了COM组件的性能需求,因此在内存管理、线程安全和接口实现等方面具有...

    ATL开发指南代码

    ATL(Active Template Library)是Microsoft提供的一种C++模板库,用于简化COM(Component Object Model)组件的开发。ATL的出现旨在为开发者提供一种更轻量级、更高效的手段来创建COM对象,相比传统的MFC...

    python实现ICESat-2 ATL08转shapefile

    python实现ICESat-2 ATL08转shapefile

    ATL源码学习-Tear-Off接口支持(代码)

    这意味着,当客户端调用`QueryInterface`请求`IDispIdInterface2`时,ATL会返回一个指向同一个对象实例的指针,但该指针仅暴露`IDispIdInterface2`接口。 ```cpp CComPtr<IDispIdInterface1> pInterface1; ...

    ATL Internals练习源码1-11章

    ATL Internals是关于深入理解和利用ATL进行编程的一本书,涵盖了从基础到高级的ATL技术。这个压缩包包含了该书前11章的练习源码,对于学习和掌握ATL编程技巧具有很高的价值。 1. ATL基础知识:ATL是一种轻量级的库...

Global site tag (gtag.js) - Google Analytics