当前位置:首页 » 编程软件 » atl编程

atl编程

发布时间: 2022-07-02 21:42:00

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

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 技 术 的 支 持 在 网 络 应 用 的 环 境 下 也 显 得 很 不 灵 活。

❷ c++中的ATL是用来干什么的

ATL简介 一. 什么是ATL 自从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能够快速地开发出高效、简洁的代码(Effective and Slim code),同时对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的支持不能很好的满足开发者的要求。

❸ atl是什么意思

ATL,Active Template Library活动模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。通过活动模板库,可以建立COM组件.用于windows shell <extension> 编程。

❹ c++中ATL,VCL,BCB指的是什么

ATL,Active TEmplate Library活动模板库
VCL是Visual Component Library的缩写,即可视组件库,它是Borland 公司出品的Delphi,C++Builder等编程语言的基本类库。
BCB就是Borland C++ Builder。

❺ ATL的ATL基本使用

这一部分将重点介绍ATL的基本使用过程。由于ATL已经被集成在Microsoft Visulal Studio的Visual C++开发环境中,因此要使用ATL必须先安装Visual C++。在下面的讨论中有关COM的基本知识请参阅有关的文档,这里不再详细说明。
使用ATL开发一个COM应用基本可以分为以下几个步骤:
创建一个新的ATL工程,并对工程的选项进行适当的配置。
向新创建的工程添加新的ATL类,并对该类进行一些初始配置工作。
根据COM应用的基本要求向新的ATL类加入新的接口定义,并实现相应的接口成员函数。
编译连接工程,注册COM应用。
下面将根据这些步骤依次介绍ATL的基本使用过程(给出的是Visual Studio 6.0的使用):
1. 创建工程
首先启动Visual C++集成开发环境,选择“File”菜单下的“New...”命令,在“New”对话框中选择“Project”页。
选择“ATL COM AppWizard”项,这是创建ATL工程的AppWizard向导入口。然后在“Project name”编辑框中输入工程的名字,单击“OK”按钮,进入AppWizard对话框。
在AppWizard对话框中主要的设置选项有:
COM服务程序的类型:
-动态连接库(Dynamic Linking Library) 最终产生一个动态连接库(DLL)形式的COM服务程序;
-应用程序(Executable application)最终产生一个可执行程序类型(EXE)的COM服务程序;
- NT服务(NT Service):产生一个以NT服务方式运行的COM服务程序。
允许嵌入Proxy/Stub代码。由Microsoft提供的MIDL编译IDL文件以后,将产生用于对象调度(Marshaling)的Proxy/Stub的代码。传统地,这部分代码与COM服务程序的代码是分离的,但是由于新的COM标准支持多线程环境下的COM对象服务,因此在动态连接库的COM服务程序中也要有Proxy/Stub的支持。为了支持在网络上的传输,ATL允许用户选择将Proxy/Stub的代码包括在生成的DLL代码中。这个选项在EXE和NT服务类型的COM应用条件下不可选。
允许支持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”对话框。
这个对话框即为创建ATL对象的向导起始界面。对话框的左边部分说明了待创建对象的基本类型,这里主要有以下的几种类型:
对象(Object)基本的COM对象类型;
控制(Control)ActiveX Control类型的ATL对象;
其他(Miscellaneous)辅助功能,如对话框的生成等;
数据访问(Data Access)数据访问,支持MTS等。
右边部分说明了每种类型的详细内容,对于一般的COM服务程序,使用对象表中的简单对象(Simple Object)就可以了。
选定待创建对象的基本类型以后,单击“Next>;”按钮进入下一步,进入对象属性设置对话框,如图4和图5所示。
对象属性设置分为两个过程:先是对象名字标识的设定,然后是对对象的基本属性进行设置。首先是对象的名字标识设置。
在对象标识编辑框中输入待创建对象的名字,ATL对象向导将同步地根据用户输入的对象标识设定该对象的C++标识和COM标识。对象的C++标识包括对象的类名,cpp文件名和头文件名。COM标识包括对象在类型库中的CoClass段和实现的主接口的名字,同时还有在系统注册表中的类型名以及ProgID。
对象名字标识设置完成以后,选择对象属性页(Attribute)进入对象的属性设置页面。
对象的属性设置是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来检查生成的类定义的情况。我们可以看到一个新的类已经生成,同时,还生成了相应的接口定义。ATL Object Wizard为我们生成了类定义的.h 和.cpp文件,此外还有用于接口定义的IDL文件。有了这些文件以后,我们就可以为接口加入成员函数,完成类的定义。
首先在Class View中选中相应的接口,显示为接口IATLTest,单击鼠标右键打开菜单,如图7。此弹出式菜单定义了为接口加入属性和方法的操作。选取其中的“Add Method...”项,可以为接口加入方法成员;选取“Add Property...”则可以为接口加入新的属性成员。
加入属性和方法的对话框可以参看图8和图9。如果我们要在接口中加入一个方法,则选取“Add Method...”菜单命令。假设方法名为ABC,方法的返回类型为COM规定的HRESULT类型。我们也可以定义非HRESULT返回类型的函数,但是这需要手工修改接口定义的IDL文件。我们定义ABC方法的一个参数为a,类型为整数型。完成了方法的定义以后,单击“OK”按钮则把此方法加入到接口中。
属性的加入过程是类似的。属性加入对话框要求指定属性的类型、名字以及属性的访问方式。在属性和方法的编辑对话框中都有一个“Attributes”按钮,在给出了一个属性或方法的基本定义之后,单击此按钮,可以对属性和方法的一些高级特性进行设置。
方法成员加入以后,我们可以通过Class View来检查ATL为我们所做的工作。首先我们看到ATL在接口的定义中加入了该方法的定义;同时在对应的ATL类定义中,也加入了一个相应的方法的定义;在类对应的.cpp文件中,加入了此方法的实现框架。此后,我们只要在这个函数框架中加入该方法的代码逻辑,一个接口函数的定义和实现就基本完成了。依照这种方式,我们可以完成整个COM对象的定义和实现。
完成以上的步骤之后,我们就可以编译连接应用了。
4. 编译连接应用、注册COM服务程序
对ATL工程的编译连接过程包括下面的几个步骤:
使用MIDL编译工程的IDL文件,形成接口定义的头文件和用于调度(Marshalling)的代码;
编译工程的.cpp文件形成目标文件;
连接目标文件,形成应用模块;
注册COM服务程序。
关于工程编译连接的其它部分同Visual C++中MFC工程的编译连接过程相似,这里只重点介绍一下COM服务程序的注册过程。
在ATL中,COM服务程序的注册是在工程编译连接的最后阶段,由ATL辅助完成的。在手工的COM编程中,服务程序的注册是比较麻烦的工作。在ATL中,系统通过读取在建立工程过程中形成的注册脚本文件来完成注册工作。注册脚本(Register Script 简称RGS)是ATL提供的文本方式的注册辅助文件。下面是注册脚本文件的一个实例。
HKCR - 表示注册表中COM对象的注册项,是HKEY_CLASS_ROOT的缩写
{
AuthTest.ActiveXObject.1 = s 'ActiveXObject Class'
{
CLSID = s ''
} - 对象的ProgID
AuthTest.ActiveXObject = s 'ActiveXObject Class'
{
CLSID = s ''
} -对象的与版本无关的ProgID
NoRemove CLSID -对象CLSID注册项
{
ForceRemove = s 'ActiveXObject Class'
{
ProgID = s 'AuthTest.ActiveXObject.1'
VersionIndependentProgID = s 'AuthTest.ActiveXObject'
InprocServer32 = s '%MODULE% -服务器类型,表示DLL服务器
{
val ThreadingModel = s 'both' -线程模型,这里是BOTH型
}
}
}
}
RGS文件包含注册COM服务程序的各项内容,通常我们不必修改此RGS文件,必要时我们也可以手工修改RGS文件来定制模块的注册过程。

❻ VC++中ATL\CLR\MFC\Win32区别是什么

atl 是活动模板库,常用来开发 activex 组件或者系统服务等;
clr 是托管编程;
mfc 是基于 mfc 框架编程,通常用来做比较复杂的窗口程序;
Win32 是基于 Win32 API 编程,通常用来做短小精悍的程序。

❼ C++里STL和ATL是什么

STL和ATL都是C++模板库。
STL = Standard Template Library,标准模板库,惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用额外安装什么。
STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。
ATL,Active Template Library活动模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。通过活动模板库,可以建立COM组件,然后通过ASP页面中的脚本对COM对象进行调用。这种COM组件可以包含属性页、对话框等控件。

❽ ATL和MFC创建ActiveX控件的区别

ATL和MFC创建ActiveX控件的区别

在visual C++
6.0中,ATL和MFC代表了两种不同的框架,分别面向不同类型的基于Windows的开发。ATL提供了一种框架来实现创建COM客户机和服务器所必
须的样板文件代码;MFC代表了创建独立的Windows应用的一种简单、一致的方法。这两种框架都可以用来创建ActiveX控件。

ActiveX控件的完全角态
ActiveX控件基于构件对象模型COM,使得ActiveX控件成为可能的COM的基本原则是一个对象的接口和其实现能够而且应该分开对待。只要
COM的对象和它的客户方代码就接口细节达成了一致,如何实现就不成其问题。ActiveX控件展示了大量
ActiveX控件包容器理解的接口。因为客户方代码和控件认可这些接口的外在表现,你可以编写一个ActiveX控件然后简单的将它放入包容器中。包容
器将通过良好定义的接口来驱动控件,而这些控件将以自己的方式做出合适的响应。在更高的层次上,一个ActiveX控件是实现了几个主要ActiveX技
术的一个COM对象,包括通常的引入COM接口,OLE嵌入协议,连接点和属性页。在较低的编程层次上,ActiveX控件只是实现了某些类型接口的
COM类。当一些客户方代码成功的查询到这些接口之一时,它就知道如何使用一个ActiveX控件了。

一个ActiveX控件暴露的接口主要分为3类。第一,ActiveX控件是可嵌入的对象;就是说,它们实现了大多数的OLE文档、in-place激活和嵌入协议。ActiveX控件实现了如下的接口:

IOleObject, IPersistStorage, IDataObject, IOleInPlaceActiveObject,
IOleInPlaceObject, IViewObject2和IRunnableObject (这一个很少用到).
第二ActiveX控件通常都支持属性页,这样客户方就可以修改控件的属性了。最后,ActiveX控件通常都利用COM的连接点技术,实现了客户方能发
现的外出接口。

为了帮助比较ATL和MFC框架,我们来看一下写在每一种框架中的相同的控件。此控件监视创建它的线程上传递的消息流。消息流控件是一个很不错的例子,因
为它演示了一个ActiveX控件所有主要的方面,包括送入接口、外出接口,属性,永久性以及属性页。让我们从研究这两个框架提供的标准的COM支持开始
吧。

MFC的基本COM支持
Microsoft建立MFC使得开发Windows®应用程序比使用SDK容易多了。有了MFC,Microsoft接着增加了对即存框架的COM支
持。这意味着MFC的开发者在增加越来越多的函数时必须保持框架的完整。同时,Visual
C++®编译器那时还不支持模板,因此,它们不得不借助非模板的其它手段来将COM功能掺入它们的类中。Microsoft通过加入一些虚函数到
CcmdTarget类和一些宏中解决了这个问题,使得在MFC中实现COM接口有了可能。

MFC内部的COM支持从CcmdTarget开始,CcmdTarget类实现了Iunknown接口,还包括了一个用于引用计数的成员变量
(m_dwRef)以及用于实现IUnknown 的6个函数:: InternalAddRef, InternalRelease,
InternalQueryInterface, ExternalAddRef, ExternalRelease, 和
ExternalQueryInterface.。QueryInterface的两个版本——AddRef和Release支持COM聚合。
InternalAddRef,

InternalRelease和InternalQueryInterface完成引用计数和QueryInterface操作,而
ExternalAddRef, ExternalRelease和
ExternalQueryInterface代理控制聚合的对象(如果此对象参与聚合的话)。

MFC使用嵌套的类复合策略来实现COM接口。在MFC中,想实现COM
接口的类是从CcmdTarget中派生的。每个由CcmdTarget派生出的类实现的接口得到它自己的嵌套类。MFC使用宏
BEGIN_INTERFACE_PART和END_INTERFACE_PART来产生嵌套类。

最后,MFC实现了表驱动的QueryInterface。MFC的接口映射的工作机理同它的消息映射基本相同:
MFC的消息映射把一个Windows消息和一个C++类中的函数相联系;MFC的接口映射把一个接口的GUID和一个表示此接口的特定的vptr的地址
相联系。每个基于CcmdTarget的类实现COM接口通过更多的宏:DECLARE_INTERFACE_MAP,
BEGIN_INTERFACE_MAP, INTERFACE_PART,和 END_INTERFACE_MAP来增加一个接口映射。

为了理解这些宏在实际中是什么样子的,请看图1,它说明了实现ActiveX控件,COleControl
的MFC类。当你细读代码时,注意ColeControl带有夹在一对BEGIN_INTERFACE_PART 和
END_INTERFACE_PART宏之间的每个接口的签名,还要注意ColeControl的接口映射表有22个条目。

除了实现了Iunknown接口,MFC还包括IclassFactory的一个标准实现。再一次,MFC通过若干宏提供了此支持。MFC有两个宏来提供
类对象:DECLARE_OLECREATE_EX 和
IMPLEMENT_OLECREATE_EX.。在一个基于CcmdTarget的类中使用这些宏增加一个ColeObjectFactory类型的静
态成员到该类中。如果你看一下AFXDISP.H中 ColeObjectFactory的定义,你将会看到用在COleObjectFactory
中的MFC的嵌套类宏为实现IClassFactory2定义了一个嵌套类。IClassFactory::CreateInstance的MFC版本使
用MFC的动态创建机制(DECLARE_DYNCREATE
和 IMPLEMENT_DYNCREATE宏打开此功能)来实例化COM类,因此买入MFC的COM支持同样意味着买入它的动态创建机制。

最后几个由MFC提供的在ActiveX控件内的基本COM支持是对Idispatch的支持。用Visual C++ 和
MFC实现一个分发接口几乎是微不足道的。在MFC中实现一个分发接口,只需要使用ClassWizard就可以了。ClassWizard中的自动创建
板有一个按钮用于添加属性,另一个用于添加方法。在MFC中,Idispatch支持来自CcmdTarget类。IDispatch
的MFC的实际实现在一个叫做COleDispatchImpl
的类中,ColeDispatchImpl派生自Idispatch,实现了所有4个Idispatch函数:GetTypeInfoCount,
GetTypeInfo, GetIDsOfNames, 和
Invoke.。由CcmdTarget派生的类通过调用EnableAutomation,将IDispatch
vptr加入到它们的接口映射中。当客户在基于MFC的ActiveX控件上调用IDispatch
的QueryInterface时,CcmdTarget交出链接在ColeDispatchImpl上的vptr。

每次你使用ClassWizard将一个自动属性或者方法加入到一个类中时,你同时也在该类的分发映射表中加入了一项。一个分发映射表是一个将
DISPIDs(用来调用分发成员的符号)和它们的供人读的名字以及和实际完成这个工作的某些C++代码联系起来的简单的表格。
ColeDispatchImpl的调用以及GetIDsOfNames函数通过在类的分发映射表中查找分发成员并分发DISPID相对应的函数来工作。
MFC能为某些基于COM的高级技术如OLE文档、OLE拖放和自动操作提供非常好的支持,然而,如果你想更改框架——比如说,你想将分发接口编程双接口
的——你就得大动手脚了。另一方面,ATL更加是COM中心的。

ATL的基本的COM支持
ATL的目标是使开发者不必重写IUnknown, IDispatch,
IclassFactory和其它的分支以将常规的DLL和EXE变成基于COM的DLL和EXE。从这个角度讲,ATL是一个比MFC精简的多的框架,
它设计和生成时就考虑了COM支持。它使用基于模板的方法,通过继承ATL提供的模板,开发者可以加入各种COM功能片断。

ATL的原始COM支持是从对Iunknown的支持开始的。ATL的Iunknown实现分成两个部分:CcomObjectRootEx类,用来处理Iunknown部分的引用计数;CcomObjectRootBase类,用来处理QueryInterface。

CcomObjectRootEx是一个基于模板的类,将线性模型作为其唯一参数。这是一个真正有趣的说明ATL怎样使用模板将算法作为模板参数传递的例
子。ATL有两个处理引用计数的类,用于处理不同的线性模型: CComSingleThreadModel 和
CcomMultiThreadModel。这些类每个都有一个递增和一个递减函数。它们之间的区别是CcomSingleThreadModel用标准
C++操作符(++和——)实现递增和递减;而CcomMultiThreadModel使用线程安全的InterlockedIncrement

InterlockedDecrement函数来实现这两个功能。根据用来实例化CcomObjectRootEx的模板参数,它能正确的运行给定的组件
类型。你很快将会看到它的用法的一个例子。象MFC,ATL使用基于表的查找机制实现QueryInterface.。
CComObjectRootBase 通过一个接口映射处理类的QueryInterface函数。BEGIN_ COM_MAP 和
END_COM_MAP
宏定义了一个接口映射的开始和结束。然而,不像MFC,ATL提供了17种途径来组成一个接口映射,例如使用从ATL的基于模板的接口实现类如
IOleObjectImpl 来的vptrs。这包括了那些从tear-off 的类或者由聚合提供的类来的vptrs。

在ATL里,C++类通过继承CcomObjectRootEx,指定它们想用的组件模型(记住,MFC的Iunknown支持是内建在CcmdTarget中的)变成了COM类。

ATL的类对象(以及IClassFactory)支持也来自模板,而MFC的类对象支持通过
ColeObjectFactory和一些宏而有效。ATL的类对象支持来自CComCoClass/CcomClassFactory类家族和
CcomCreator类家族。CcomCoClass包含了类的GUID,定义了COM类的错误处理设施。CcomCreator类提供了
CreateInstance的实现,供CcomClassFactory使用。对于MFC,你可以通过若干宏,使所有这种支持有效。ATL包括
DECLARE_CLASS_FACTORY,
DECLARE_CLASS_ FACTORY2, DECLARE_CLASS_FACTORY_AUTO_THREAD, 以及
DECLARE_CLASS_FACTORY_SINGLETON等宏用来使各种具体的类工厂支持有效。

最后,ATL
对IDispatch的支持还来自模板类,——其名字是IDispatchImpl.。比起MFC的Idispatch支持来,ATL对
Idispatch的支持更加是COM中心的。MFC使用了一种hand-rolled
的IDispatch实现,而ATL使用更加标准的方法来加载一个接口的类型信息并代表标准的类型库编译器。

图2显示了一个标准的基于ATL的控件。最值得注意的一点是MFC和ATL各是怎样引入实现一个控件所需的必要的各种接口的。MFC对标准控件接口的支持
是内建在ColeControl类中的。你从ColeControl中派生出你的控件并且一次性继承所有的函数调用。注意ATL通过模板继承以零碎的方式
逐个引入每个功能片断。这是一个非常重要的差异,因为这意味着用ATL你可以忽略一些接口实现模板(例如,使你的控件更为精简)剥掉不希望的功能。对
MFC,你不能完成同样的动作——不管你想不想,你将获得所有接口。

关于例子应用
这里我将使用的例子是一个通过一个分支过程监控消息流的ActiveX控件,它实时的显示消息流图。这两个控件实际上有着相同的功能。它们都把图表提交到
屏幕。它们都带流入接口以便包容器能通知控件开始和停止该图表。它们都支持图表线的颜色和消息间隔长度作为属性而可以永久存在。最后,它们都支持缺省事件
集,将关于在一个特定时间段里处理的消息的数量通知包容器。图3显示了这两个控件。

可以看一下:

热点内容
c语言发短信 发布:2024-05-18 13:23:08 浏览:833
vb数据库程序 发布:2024-05-18 13:01:57 浏览:111
新建文件夹2免费手机 发布:2024-05-18 12:56:13 浏览:365
自己在家搭建服务器有水冷散热吗 发布:2024-05-18 12:47:27 浏览:649
旧版的安卓手机怎么使用微信 发布:2024-05-18 12:46:36 浏览:467
我的世界服务器开多久 发布:2024-05-18 12:45:32 浏览:593
vba获取网页表格数据库数据库数据库 发布:2024-05-18 12:23:24 浏览:700
腾讯服务器为什么卡顿 发布:2024-05-18 12:02:12 浏览:306
如何知道密码锁有没有nfc 发布:2024-05-18 11:58:09 浏览:962
单片机c语言模块化编程 发布:2024-05-18 11:53:16 浏览:645