VC的MFC和ATL具体是指什么嘛?

RTtt... RTtt 展开
 我来答
attackiller
推荐于2017-11-23 · TA获得超过2981个赞
知道小有建树答主
回答量:993
采纳率:0%
帮助的人:347万
展开全部
MFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinOS下开发人员使用的专业C++ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC就是挂在它之上的一个输助软件开发包,MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范,而VC++只是一个编译器,或者说是一种编译器+源程序编辑器的IDE,WS,PlatForm,这跟Pascal和Dephi的关系一个道理,Pascal是Dephi的语言基础,Dephi使用Pascal规范来进行Win下应用程序的开发和编译,却不同于Basic语言和VB的关系,Basic语言在VB开发出来被应用的年代已经成了Basic语言的新规范,VB新加的Basic语言要素,如面对对象程序设计的要素,是一种性质上的飞跃,使VB既是一个IDE,又成长成一个新的程序设计语言),MFC同BC++集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微软为VC++专配的..
MFC是Win API与C++的结合,API,即微软提供的WinOS下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方(如我是一方,微软是一方,Borland就是第三方)的编程语言来进行对Win OS下应用程序的开发,使这些被开发出来的应用程序能在WinOS下运行,比如VB,VC++,Java,Dehpi编程语言函数本质上全部源于API,因此用它们开发出来的应用程序都能工作在WinOS的消息机制和绘图里,遵守WinOS作为一个操作系统的内部实现,这其实也是一种必要,微软如果不提供API,这个世上对Win编程的工作就不会存在,微软的产品就会迅速从时尚变成垃圾,上面说到MFC是微软对API函数的专用C++封装,这种结合一方面让用户使用微软的专业C++ SDK来进行Win下应用程序的开发变得容易,因为MFC是对API的封装,微软做了大量的工作,隐藏了好多内节程序开发人员在Win下用C++ & MFC编制软件时的大量内节,如应用程序实现消息的处理,设备环境绘图,这种结合是以方便为目的的,必定要付出一定代价(这是微软的一向作风),因此就造成了MFC对类封装中的一定程度的的冗余和迂回,但这是可以接受的..
最后要明白MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建,销毁),而是一些在WinOS(用MFC编写的程序绝大部分都在WinOS中运行)中实现内部处理的类,如数据库的管理类等,学习中最应花费时间的是消息和设备环境,对C++和MFC的学习中最难的部分是指针,C++面向对像程序设计的其它部分,如数据类型,流程控制都不难,建议学习数据结构C++版..

一、 什 么 是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 技 术 的 支 持 在 网 络 应 用 的 环 境 下 也 显 得 很 不 灵 活。
百度网友1566c4ac2
2005-12-16 · TA获得超过136个赞
知道答主
回答量:622
采纳率:0%
帮助的人:0
展开全部
真全面 受教了 谢谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式