ATL 即活动模板库,是一套基于模板的 C++ 类,使用这些类可以容易地创建小型、快速的组件对象模型 (COM) 对象。它具有对主要 COM
功能的特殊支持,包括:IUnknown、IClassFactory、IClassFactory2 和 IDispatch 的常用实现;双重接口;标准 COM 枚举数接口;连
接点;分开的接口;ActiveX 控件。
[[
看来,ATL是用C++开发COM的一个很好的选择!
]]
ATL 代码可以用来创建单线程对象、单元模型对象、自由线程模型对象或既是自由线程又是单元模型的对象。
模板有一些像宏。与使用宏一样,调用模板将使它展开(伴随适当的参数替换)为已经编写的代码。但是,模板比这更进一步,它允许基于
作为参数传递的类型创建新类。这些新类能够实现以类型安全的方法执行在模板代码中表示的操作。
模板库(如 ATL)与传统的 C++ 类库的区别在于:它们通常只作为源代码(或作为具有少量的提供支持的运行时的源代码)提供,并且在
本质上没有固有的分层结构或没有必要有分层结构。不是从类中派生以得到所需的功能,而是从模板中实例化类。
ATL 使您可以很容易创建 COM 对象、自动化服务器和 ActiveX 控件。ATL 为许多基本的 COM 接口提供内置支持。
ATL 作为在应用程序中包括的源代码提供。ATL 还使一个 DLL (atl71.dll) 可用,该 DLL 包含可以在多个组件之间共享的代码。但是,该
DLL 并非必要。
[[
看过一些讲COM的书上说:COM只是一种规范,而它的表现形式通常是一个DLL!但是并不绝对是DLL!
那还有什么形式呢?
]]
使用 ATL
ATL 对于用 C++ 创建 COM 组件和节省空间都是一种快速简便的方法。如果不需要 MFC 自动提供的所有内置功能,使用 ATL 创建控件。
使用 MFC
MFC 允许创建具有完整功能的应用程序、ActiveX 控件和活动文档。如果已经使用 MFC 创建了控件,可能需要继续使用 MFC 进行开发。
当创建新控件时,如果不需要 MFC 的所有内置功能,可考虑使用 ATL。
[[
呵呵,看来ATL比MFC要好不少了!最起码体积占优势呀!
不过,到这里可以有一些肯定的问题了,ATL:活动模板库、MFC基本类库!都是类库!ATL和MFC是平行的!不要搞出笑话!
]]
活动模板库 (ATL) 是一套基于模板的 C++ 类,用以简化小而快的 COM 对象的编写。
[[
ATL是一套现成的类库,提供给程序员,目的是编写COM对象的!
]]
使用 ATL 项目向导的“应用程序设置”页为新 ATL 项目设计和添加基本功能。
属性化
默认值。创建使用属性的 ATL 项目。选择此选项后,module 属性将插入到项目的 .cpp 文件中。该属性自动实现 DllMain、
DllRegisterServer、DllUnregisterServer、DllGetClassObject 和 DllCanUnloadNow。ATL 项目向导生成两个项目:支持属性的框架
ATL DLL 项目(称为 ProjName)和代理/存根 (stub) 项目(称为 ProjNamePS)。
属性化项目不允许 MFC 支持和合并代理/存根 (stub) 代码。
默认情况下,其他将对象和控件插入项目的 ATL 向导使用属性化代码。
服务器类型
从三种服务器类型中选择一种:
动态链接库 (DLL)
选择以创建进程内服务器。
可执行文件 (EXE)
选择以创建本地进程外服务器。此选项不允许 MFC 或 COM+ 1.0 支持。它不允许合并代理/存根 (stub) 代码。
服务 (EXE)
选择以创建当 Windows 启动时在后台运行的 Windows 应用程序。此选项不允许 MFC 或 COM+ 1.0 支持,也不允许合并代理/存根 (
stub) 代码。
附加选项
注意 所有的附加选项仅适用于 DLL 项目。
允许合并代理/存根(stub)代码
选择“允许合并代理/存根(stub)代码”复选框是为了需要封送处理接口时比较方便。此选项在与服务器相同的 DLL 中放置 MIDL 生成的代理
和存根 (stub) 代码。
支持 MFC
选择以指定对象包含 MFC 支持。此选项将项目链接到 MFC 库,以便可以访问它们包含的任何类和函数。
支持 COM+ 1.0
选择修改项目生成设置以支持 COM+ 1.0 组件。除标准库列表以外,向导还添加了 COM+ 1.0 组件特定库 comsvcs.lib
另外,当启动应用程序时 mtxex.dll 在主系统上延迟加载。
支持组件注册器 如果 ATL 项目包含对 COM+ 1.0 组件的支持,则可以设置此选项。组件注册器使 COM+ 1.0 对象得以获取组件列表、注
册组件或注销组件(个别或同时)。
从MSDN里学习