活动模板库(Active Template Library (ATL))是一个以C++模板技术的类的集合,是Microsoft为了简化组件对象模型(COM)的程序设计而发布的。 COM旨在允许开发者利用Visual C++创造各种各样的组件,包括OLE Automation服务器,与ActiveX控件。 Patterned after the Standard Template Library(STL), ATL 包含一个对象向导(object wizard),当设置好主要的对象结构后,能够产生快速与较小的程序。
通过MFC可以提供互联网市场所需的控件,但是市场上还需要可以从网络上下载的轻量级控件。MFC程序通常较大而且需要支持DLL。 [3] ATL允许创建不需要支持DLL的更小的控件,所以ATL是一种在COM控件环境下MFC的轻量级替代物。
头文件afximpl.h 实现了一套模板库,如CArray, CList, CMap等。因为在发布时STL尚未进入C++语言标准,因此ATL自行开发实现了一套。1
编译选项ATL定义三个宏来来影响生成的COM服务器的优化。
_ATL_MIN_CRT 服务器不链接标准的C/C++运行库,并且ATL提供了函数malloc、realloc、new和delete的一个实现。不能调用任何其他的C/C++运行库的函数。_mainATL向导生成的ATL工程为所有的Release版本的定义了_ATL_MIN_CRT,但是没有为Debug版本定义这个符号宏。
_ATL_DLL 服务器动态链接工具函数库atl.dll
_ATL_STATIC_REGISTRY 服务器静态链接对组件注册的支持
Debug配置没有定义上述三个符号宏。Release MinSize配置定义了_ATL_MIN_CRT和_ATL_DLL。Release MinDependency配置定义了_ATL_MIN_CRT和_ATL_STATIC_REGISTRY。1
历史版本ATL版本3.0 (Visual Studio 6.0)
ATL版本7.0 (Visual Studio 2003)
ATL版本8.0 (Visual Studio 2005)
支持类ATL包含了许多RAII类以简化对COM类型的管理。常用的有:
CComPtr通用智能指针
CComBSTRBSTR包装
CComVariantVARIANT包装
CComSafeArraySAFEARRAY包装2
编译器COM支持类虽然不是ATL的正式组成部分,Microsoft Visual C++包含额外的C++ RAII类以简化对COM类型的管理,可替代或配合ATL中对应的部分:
_com_ptr_t装饰COM接口的智能执政,前缀以"Ptr"。
_bstr_tBSTR包装器
_variant_tVARIANT包装器
_com_errorHRESULT包装器
注意从Visual Studio 2012起,编译器COM支持类不再包含SAFEARRAY包装器。2
本词条内容贡献者为:
王沛 - 副教授、副研究员 - 中国科学院工程热物理研究所