Active Template Library | |
---|---|
Developer(s) | Microsoft |
Written in | C++ |
Operating system | Microsoft Windows |
Type | Library orframework |
License | Proprietary |
TheActive Template Library (ATL) is a set of template-basedC++ classes developed byMicrosoft, intended to simplify the programming ofComponent Object Model (COM) objects. The COM support inMicrosoft Visual C++ allows developers to create a variety of COM objects,OLE Automation servers, andActiveX controls.[1][2] ATL includes an object wizard that sets up primary structure of the objects quickly with a minimum of hand coding. On the COM client side ATL providessmart pointers that deal with COM reference counting. The library makes heavy use of thecuriously recurring template pattern.
COM objects can also be created withMicrosoft Foundation Classes (MFC), but this leads to larger binaries that require supportDLLs.[3] ATL, on the other hand, is a more lightweight alternative in situations where the graphical user interface parts of MFC are not required.[4]
Older versions of ATL (ATL prior to version 7.1,pre-Visual Studio 2005) are incompatible withDEP because it places executablethunks in data heap.[5][6][7] This problem can be mitigated with DEP-ATL thunk emulation with performance penalty.[8][9]
In ATL version 7 (Visual Studio 2003), which directly succeeded version 3 (Visual Studio 6.0), a number of MFC classes like CString were made available in ATL, or more precisely moved to an ATLMFC common layer which is shared by both libraries. ATL version 7 also introduced attributes in C++ in an attempt to provide something similar toCLI attributes, however these have not been particularly successful, and have been deemphasized in ATL version 8 (Visual Studio 2005); the various wizards no longer generate them by default. Version 7 also introduced new string conversion classes.
On July 28, 2009, Microsoft released a patch to ATL to fix a bug that could allowActiveX controls created using ATL to be vulnerable to a remote code execution security flaw.[10]
Since Visual Studio 2013 (ATL version 12), all ATL code is static, eliminating the DLL.[11][12]
ATL version is defined by ATL_VER macros and can be queried via AtlGetVersion() function.[13]
ATL includes manyRAII classes to simplify management of COM types. The most commonly used classes include:
CComPtr<T>
[14] general-purpose smart-pointer,CComBSTR
[15] BSTR wrapper,CComVariant
[16] VARIANT wrapper, andCComSafeArray<T>
[17] SAFEARRAY wrapper.Although not formally part of ATL, Microsoft Visual C++ also includes additional C++ RAII classes to simplify management of COM types. Thesecompiler COM support classes can be used as replacement for or in combination with ATL, and includes:
_com_ptr_t
[18] smart-pointer that decorates the COM interface name with a "Ptr" suffix,_bstr_t
[19] BSTR wrapper,_variant_t
[20] VARIANT wrapper, and_com_error
[21] HRESULT wrapper.Note that as of Visual Studio 2012, the compiler COM support classes does not include a SAFEARRAY wrapper.